原型模式:用原型的实例指定创建的种类,并通过拷贝这些原型创建新的对象。
目的:保护最原始的一份存档,隐藏复制过程。
==================接口===============================
public interface IOrder extends ProtoType { int getOrderNumber(); void setOrderNumber(int orderNumber); String getOrderName(); void setOrderName(String orderName); }
==============父接口拷贝副本=====================
interface ProtoType {
ProtoType cloneProtoType();
}
=================实现IOrder 的子类===============================
public class PersonOrder implements IOrder { private String orderName; private int orderNumber;// 属性为基本属性 为浅克隆 private ArrayList list; // 属性为对象 则为深克隆
// 拷贝副本 包含所有数据 @Override public ProtoType cloneProtoType() { PersonOrder personOrder = new PersonOrder(); personOrder.setOrderNumber(orderNumber); personOrder.setOrderName(orderName); personOrder.list= new ArrayList(); return personOrder; } @Override public int getOrderNumber() { return this.orderNumber; } @Override public void setOrderNumber(int orderNumber) { this.orderNumber = orderNumber; } @Override public String getOrderName() { return this.orderName; } @Override public void setOrderName(String orderName) { this.orderName=orderName; } }
======================处理order 的工厂============================
public class OrderDealFactory { public void dealOrder(IOrder order){ int number = order.getOrderNumber(); while (number>0){ System.out.println("原始订单:" + order.hashCode()); IOrder iOrder = null; iOrder = (IOrder)order.cloneProtoType(); iOrder.setOrderNumber(number>=1000?1000:number); System.out.println("newOrder" + iOrder.hashCode() + " number:" + iOrder.getOrderNumber()); number -= 1000; } } }
+++++++++++++++++++++++调用++++++++++++++++++++++++++++++
public class Client { @Test public void test(){ OrderDealFactory orderDealFactory = new OrderDealFactory(); PersonOrder personOrder = new PersonOrder(); personOrder.setOrderName("student"); personOrder.setOrderNumber(4500); orderDealFactory.dealOrder(personOrder); } }