日期:2014-05-20 浏览次数:20824 次
public class Order {
private String name;
//
private Set<OrderLine> orderLines = new HashSet<OrderLine>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 因为这是一个domain对象,贯穿你整个项目,不知你是否在意过这样的设计。
* 这样的设计对你是否有用呢?
* 用户:表示API调用者。
*/
public Set<OrderLine> getOrderLines() {
/*
* 1.防止用户任意修改订单行的内容,强制要求用户使用当前类提供的API修改订单行
* 2.getOrderLines()绝对不为null,有可能getOrderLines().isEmpty()为true
* 用在你的程序中不会出现if(getOrderLines() == null && getOrderLines().isEmpty()),
* 只会出现if(getOrderLines().isEmpty())
*/
return Collections.unmodifiableSet(orderLines);
}
//-----------------------提供API修改Order by OrderLine----------------------------//
public void addOrderLine(OrderLine orderLine) {
//
orderLines.add(orderLine);
}
public void removeOrderLine(OrderLine orderLine) {
// ...
}
//-----------------------提供API修改Order by OrderLine----------------------------//
public void setOrderLines(Set<OrderLine> orderLines) {
// this.orderLines = orderLines;
// 为什么没有向上面来做,是因为如果是这样赋值的话那么两个对象就是同一个引用了。
// 用户修改orderLines,this.orderLines也同样会被修改。
// 而提供这个类期望用户通过该类提供的接口来修改orderLines。
orderLines.addAll(orderLines);
}
}
return Collections.unmodifiableSet(orderLines);