设计模式—原型

  • 特点:
  1. 原型模式是一种创建模式
  2. 原型模式适用于构建较复杂,耗时较长的对象
  3. 原型模式不经过构造方法
  4. 使用原型模式区分好深拷贝和浅拷贝
  5. 对于简单的对象,不建议使用的原型模式
  • 深度拷贝和浅拷贝

浅拷贝实际是对成员变量所有的字段进行一次拷贝,对于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;
    }

}

推荐阅读更多精彩内容