- 特点:
- 原型模式是一种创建模式
- 原型模式适用于构建较复杂,耗时较长的对象
- 原型模式不经过构造方法
- 使用原型模式区分好深拷贝和浅拷贝
- 对于简单的对象,不建议使用的原型模式
- 深度拷贝和浅拷贝
浅拷贝实际是对成员变量所有的字段进行一次拷贝,对于8中常见的包装类,string类型
引用类型的拷贝
public interface Prototype {
Prototype cloneOrder();
}
public interface IOrder extends Prototype {
int getOderNumber();
void setOderNumber(int number);
}
public class OrderDealFactory {
public void dealOrder(IOrder order)
{
System.out.println("原订单地址 : "+order.hashCode());
int number=order.getOderNumber();
while (number>0) {
// IOrder iOrder=null;
// if(order instanceof PersonOrder){
// //个人订单
// PersonOrder personOrder=(PersonOrder) order;
// PersonOrder newPersonOrder=new PersonOrder();
// newPersonOrder.setOderNumber(number>1000?1000:number);
// newPersonOrder.setOrderName(personOrder.getOrderName());
// iOrder=newPersonOrder;
// }else if(order instanceof CompanyOrder) {
// }
//
IOrder iOrder=(IOrder) order.cloneOrder();
iOrder.setOderNumber(number>1000?1000:number);
number-=1000;
System.out.println("订单---- number
"+iOrder.getOderNumber()+
"地址 : "+iOrder.hashCode());
}
}
}
public class PersonOrder implements IOrder{
private int oderNumber;
private String name;
@Override
public int getOderNumber() {
return oderNumber;
}
@Override
public void setOderNumber(int number) {
oderNumber=number;
}
public String getOrderName() {
return name;
}
public void setOrderName(String name) {
this.name=name;
}
@Override
public Prototype cloneOrder() {
PersonOrder personOrder=new PersonOrder();
personOrder.setOderNumber(oderNumber);
personOrder.setOrderName(name);
return personOrder;
}
}