- 特點:
- 原型模式是一種創(chuàng)建模式
- 原型模式適用于構(gòu)建較復雜隘击,耗時較長的對象
- 原型模式不經(jīng)過構(gòu)造方法
- 使用原型模式區(qū)分好深拷貝和淺拷貝
- 對于簡單的對象,不建議使用的原型模式
- 深度拷貝和淺拷貝
淺拷貝實際是對成員變量所有的字段進行一次拷貝品抽,對于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;
}
}