今天尝试使用visio画了一个序列图。
话不多说,先打开visio,新建一个UML序列。
先新建几个对象生命线
加入几个激活
而后是消息,实线表示请求,虚线表示响应。
当然如果不影响理解,可以不用每个请求都配上一个响应。
此UML例子是在《UML精粹:标准对象建模语言简明指南》中拿过来的,为了更好的理解这个UML,下面使用java来实现此UML。
ps,源码上传到码云了。https://gitee.com/xixiw777/sequenceDiagramhttps://gitee.com/xixiw777/sequenceDiagram
- procuct
package com.simon.uml.sequenceDiagram;
/**
* Created by IntelliJ IDEA.
*
* @author: Simon
* @date: 2019-05-09
* @time: 14:50
* @description:产品
*/
public class Product {
private String name;
private double price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public double getPrice(int number) {
double orderLinePrice = price * number;
System.out.println("product name:" + getName()
+ "\tprice:" + getPrice()
+ "\tnumber:" + number
+ "\torder line price:" + orderLinePrice
);
return orderLinePrice;
}
public void setPrice(double price) {
this.price = price;
}
}
- customer
package com.simon.uml.sequenceDiagram;
/**
* Created by IntelliJ IDEA.
*
* @author: Simon
* @date: 2019-05-09
* @time: 14:51
* @description:客户
*/
public class Customer {
private double discount;
public double getDiscountedValue(Order order) {
return discount * order.getBaseValue();
}
public double getDiscount() {
return discount;
}
public void setDiscount(double discount) {
this.discount = discount;
}
}
- order
package com.simon.uml.sequenceDiagram;
import java.util.List;
/**
* Created by IntelliJ IDEA.
*
* @author: Simon
* @date: 2019-05-09
* @time: 14:50
* @description:订单
*/
public class Order {
private double baseValue;
private Customer customer;
private List<OrderLine> orderLineList;
public double calculatePrice() {
double sumOrderLinePrice = 0;
for (OrderLine orderLine : orderLineList) {
double orderLinePrice = orderLine.calculatePrice();
sumOrderLinePrice += orderLinePrice;
}
this.setBaseValue(sumOrderLinePrice);
System.out.println("order base price:" + sumOrderLinePrice);
double discountedValue = getCustomer().getDiscountedValue(this);
System.out.println("order discounted price:" + discountedValue);
return discountedValue;
}
public double getBaseValue() {
return baseValue;
}
public void setBaseValue(double baseValue) {
this.baseValue = baseValue;
}
public List<OrderLine> getOrderLineList() {
return orderLineList;
}
public void setOrderLineList(List<OrderLine> orderLineList) {
this.orderLineList = orderLineList;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
order line
package com.simon.uml.sequenceDiagram;
/**
* Created by IntelliJ IDEA.
*
* @author: Simon
* @date: 2019-05-09
* @time: 14:50
* @description:订单明细
*/
public class OrderLine {
private int number;
private Product product;
public OrderLine(int number, Product product) {
this.number = number;
this.product = product;
}
public double calculatePrice() {
return product.getPrice(number);
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
-
order的测试用例
package com.simon.uml.sequenceDiagram;
import org.junit.Assert;
import java.util.ArrayList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
*
* @author: Simon
* @date: 2019-05-09
* @time: 15:23
* @description:
*/
public class OrderTest {
@org.junit.Test
public void calculatePrice() {
//这个商品是鞋子,123块钱一双
Product productShoes = new Product();
productShoes.setName("shoes");
productShoes.setPrice(123);
//这个商品是袜子,8块钱一双
Product productSocket = new Product();
productSocket.setName("socket");
productSocket.setPrice(8);
//这是一个老客户,打七折
Customer customer = new Customer();
customer.setDiscount(0.7);
//这个客户下了一个单
Order order = new Order();
order.setCustomer(customer);
//买了一双鞋子,两双袜子
OrderLine orderLineShoes = new OrderLine(1, productShoes);
OrderLine orderLineSocket = new OrderLine(2, productSocket);
List<OrderLine> orderLineList = new ArrayList<OrderLine>();
orderLineList.add(orderLineShoes);
orderLineList.add(orderLineSocket);
order.setOrderLineList(orderLineList);
//算一算总共多少钱
double priceActual = order.calculatePrice();
Assert.assertEquals("97.3", String.valueOf(priceActual));
}
}
- 测试用例的输出
product name:shoes price:123.0 number:1 order line price:123.0
product name:socket price:8.0 number:2 order line price:16.0
order base price:139.0
order discounted price:97.3
转载于:https://my.oschina.net/u/3301706/blog/3047521