原型设计的目的是为了使数据在操作的时候,留存跟,也就是备份或者说是拷贝.
拷贝分为浅拷贝和深拷贝,区别是深拷贝拷贝了对象以及对象所在的成员变量.
场景:客户一个月要生产30000个产品,而一个工厂一个月满载的生产能力是10000,要求每个工厂都要记录,以便后续质量跟踪.
一:创建接口类(包含clone方法)
package yuaxing;
public interface ProtoType {
ProtoType cloneSelf();
}
二:创建订单接口(继承ProType)
package yuaxing;
public interface Iorder extends ProtoType{
int getNum();
void setNum(int num);
}
三:创建个人订单类(实现Ioder)
package yuaxing;
public class PersonalOrder implements Iorder {
public int orderNum;
public String orderName;
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
@Override
public ProtoType cloneSelf() {
PersonalOrder personalOrder = new PersonalOrder();
personalOrder.setNum(orderNum);
personalOrder.setOrderName(orderName);
return personalOrder;
}
@Override
public int getNum() {
return orderNum;
}
@Override
public void setNum(int num) {
this.orderNum = num;
}
}
其中Name,为子类私有变量.四:创建订单处理中心
package yuaxing;
public class OrderDealFactory {
public void dealOrder(Iorder order) {
int num = order.getNum();
while(num >0) {
PersonalOrder cloneSelf = (PersonalOrder) order.cloneSelf();
cloneSelf.setNum(num>10000?10000:num);
num = num -10000;
System.out.println("工厂Id-->"+cloneSelf.hashCode()+"数量-->"+cloneSelf.getNum());;
}
}
}
五:客户端调用
package yuaxing;
public class Client {
public static void main(String []args) {
OrderDealFactory orderDealFactory = new OrderDealFactory();
PersonalOrder personalOrder = new PersonalOrder();
personalOrder.setNum(30000);
personalOrder.setOrderName("个人订单");
orderDealFactory.dealOrder(personalOrder);
}
}
调用结果工厂Id-->2018699554数量-->10000
工厂Id-->1311053135数量-->10000
工厂Id-->118352462数量-->10000
每一个工厂的对象都被记录下来.
2314

被折叠的 条评论
为什么被折叠?



