原型模式

阅读《研磨设计模式》笔记。之后若有所感,再补充。
原型模式核心:克隆
场景:有一个保存订单的系统,订单数超过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);
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值