?今天尝试使用visio画了一个序列图。
话不多说,先打开visio,新建一个UML序列。
先新建几个对象生命线
加入几个激活
而后是消息,实线表示请求,虚线表示响应。
当然如果不影响理解,可以不用每个请求都配上一个响应。
此UML例子是在《UML精粹:标准对象建模语言简明指南》中拿过来的,为了更好的理解这个UML,下面使用java来实现此UML。
procuct
packagecom.simon.uml.sequenceDiagram;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:50
*@description:产品
*/
publicclassProduct{
privateStringname;
privatedoubleprice;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetPrice(){
returnprice;
}
publicdoublegetPrice(intnumber){
doubleorderLinePrice=price*number;
System.out.println("productname:"+getName()
+"tprice:"+getPrice()
+"tnumber:"+number
+"torderlineprice:"+orderLinePrice
);
returnorderLinePrice;
}
publicvoidsetPrice(doubleprice){
this.price=price;
}
}
customer
packagecom.simon.uml.sequenceDiagram;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:51
*@description:客户
*/
publicclassCustomer{
privatedoublediscount;
publicdoublegetDiscountedValue(Orderorder){
returndiscount*order.getBaseValue();
}
publicdoublegetDiscount(){
returndiscount;
}
publicvoidsetDiscount(doublediscount){
this.discount=discount;
}
}
order
packagecom.simon.uml.sequenceDiagram;
importjava.util.List;
/**
*CreatedbyIntelliJIDEA.
*
*@author:Simon
*@date:2019-05-09
*@time:14:50
*@description:订单
*/
publicclassOrder{
privatedoublebaseValue;
privateCustomercustomer;
privateList publicdoublecalculatePrice(){ doublesumOrderLinePrice=0; for(OrderLineorderLine:orderLineList){ doubleorderLinePrice=orderLine.calculatePrice(); sumOrderLinePrice+=orderLinePrice; } this.setBaseValue(sumOrderLinePrice); System.out.println("orderbaseprice:"+sumOrderLinePrice); doublediscountedValue=getCustomer().getDiscountedValue(this); System.out.println("orderdiscountedprice:"+discountedValue); returndiscountedValue; } publicdoublegetBaseValue(){ returnbaseValue; } publicvoidsetBaseValue(doublebaseValue){ this.baseValue=baseValue; } publicList returnorderLineList; } publicvoidsetOrderLineList(List this.orderLineList=orderLineList; } publicCustomergetCustomer(){ returncustomer; } publicvoidsetCustomer(Customercustomer){ this.customer=customer; } } orderline packagecom.simon.uml.sequenceDiagram; /** *CreatedbyIntelliJIDEA. * *@author:Simon *@date:2019-05-09 *@time:14:50 *@description:订单明细 */ publicclassOrderLine{ privateintnumber; privateProductproduct; publicOrderLine(intnumber,Productproduct){ this.number=number; this.product=product; } publicdoublecalculatePrice(){ returnproduct.getPrice(number); } publicintgetNumber(){ returnnumber; } publicvoidsetNumber(intnumber){ this.number=number; } publicProductgetProduct(){ returnproduct; } publicvoidsetProduct(Productproduct){ this.product=product; } } order的测试用例 packagecom.simon.uml.sequenceDiagram; importorg.junit.Assert; importjava.util.ArrayList; importjava.util.List; /** *CreatedbyIntelliJIDEA. * *@author:Simon *@date:2019-05-09 *@time:15:23 *@description: */ publicclassOrderTest{ @org.junit.Test publicvoidcalculatePrice(){ //这个商品是鞋子,123块钱一双 ProductproductShoes=newProduct(); productShoes.setName("shoes"); productShoes.setPrice(123); //这个商品是袜子,8块钱一双 ProductproductSocket=newProduct(); productSocket.setName("socket"); productSocket.setPrice(8); //这是一个老客户,打七折 Customercustomer=newCustomer(); customer.setDiscount(0.7); //这个客户下了一个单 Orderorder=newOrder(); order.setCustomer(customer); //买了一双鞋子,两双袜子 OrderLineorderLineShoes=newOrderLine(1,productShoes); OrderLineorderLineSocket=newOrderLine(2,productSocket); List orderLineList.add(orderLineShoes); orderLineList.add(orderLineSocket); order.setOrderLineList(orderLineList); //算一算总共多少钱 doublepriceActual=order.calculatePrice(); Assert.assertEquals("97.3",String.valueOf(priceActual)); } } 测试用例的输出 productname:shoesprice:123.0number:1orderlineprice:123.0 productname:socketprice:8.0number:2orderlineprice:16.0 orderbaseprice:139.0 orderdiscountedprice:97.3如何使用visio画UML序列图的下载地址:
……