阅读《研磨设计模式》笔记。之后若有所感,再补充。
原型模式核心:克隆
场景:有一个保存订单的系统,订单数超过1000则把订单分出1000,变成了两张订单,类推。
且订单分为个人订单和企业订单。
原型模式核心:克隆
场景:有一个保存订单的系统,订单数超过1000则把订单分出1000,变成了两张订单,类推。
且订单分为个人订单和企业订单。
/**
* @description 订单的接口,声明了可以克隆自身的方法
* @author liuwei
* @date 2014-4-17
* @version 1.0
*/
public interface OrderApi {
public int getOrderProductnNum();
public void setOrderProductnNum(int num);
/**
* 克隆自身的方法
* @return 订单原型的实例
*/
public OrderApi cloneApi();
}
/**
* @description
* @author liuwei
* @date 2014-4-17
* @version 1.0
*/
public class PersonalOrder implements OrderApi {
private String customerName;
private String productId;
private int orderProductNum = 0;
/*
* (non-Javadoc)
*
* @see prototype.OrderApi#getOrderProductnNum()
*/
@Override
public int getOrderProductnNum() {
return orderProductNum;
}
/*
* (non-Javadoc)
*
* @see prototype.OrderApi#setOrderProductnNum(int)
*/
@Override
public void setOrderProductnNum(int num) {
this.orderProductNum = num;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
/*
* (non-Javadoc)
*
* @see prototype.OrderApi#cloneApi()
*/
@Override
public OrderApi cloneApi() {
//
PersonalOrder order = new PersonalOrder();
order.setCustomerName(this.customerName);
order.setProductId(this.productId);
order.setProductId(this.productId);
return order;
}
public String toString() {
return "本个人订单的订购人是=" + this.customerName + ",订单产品是="
+ this.getProductId() + ",订单数量为=" + this.orderProductNum;
}
}
/**
* @description
* @author liuwei
* @date 2014-4-17
* @version 1.0
*/
public class EnterpriseOrder implements OrderApi{
private String enterpriseName;
private String productId;
private int orderProductNum = 0;
/* (non-Javadoc)
* @see prototype.OrderApi#getOrderProductnNum()
*/
@Override
public int getOrderProductnNum() {
// TODO Auto-generated method stub
return 0;
}
public String getEnterpriseName() {
return enterpriseName;
}
public void setEnterpriseName(String enterpriseName) {
this.enterpriseName = enterpriseName;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
/* (non-Javadoc)
* @see prototype.OrderApi#setOrderProductnNum(int)
*/
@Override
public void setOrderProductnNum(int num) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see prototype.OrderApi#cloneApi()
*/
@Override
public OrderApi cloneApi() {
EnterpriseOrder order = new EnterpriseOrder();
order.setEnterpriseName(this.enterpriseName);
order.setOrderProductnNum(this.orderProductNum);
order.setProductId(this.productId);
return order;
}
public String toString(){
return "本企业订单的订购企业是=" + this.enterpriseName + ",订单产品是="
+ this.getProductId() + ",订单数量为=" + this.orderProductNum;
}
}
/**
* @description
* @author liuwei
* @date 2014-4-17
* @version 1.0
*/
public class OrderBusiness {
public void saveOrder(OrderApi order){
while(order.getOrderProductnNum() > 1000){
OrderApi newOrder = order.cloneApi();
newOrder.setOrderProductnNum(1000);
order.setOrderProductnNum(order.getOrderProductnNum() - 1000);
System.out.println("拆分生成订单==" + newOrder);
}
System.out.println("订单==" + order);
}
}
/**
* @description 场景:有一个保存订单的系统,订单数超过1000则把订单分出1000,变成了两张订单,类推。
* 且订单分为个人订单和企业订单。
* @author liuwei
* @date 2014-4-17
* @version 1.0
*/
public class Client {
public static void main(String[] args) {
PersonalOrder order = new PersonalOrder();
order.setCustomerName("张三");
order.setOrderProductnNum(2999);
order.setProductId("p001");
OrderBusiness ob = new OrderBusiness();
ob.saveOrder(order);
}
}