美文网首页
设计模式—原型

设计模式—原型

作者: 左上偏右 | 来源:发表于2017-01-23 17:21 被阅读8次
    • 特点:
    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;
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:设计模式—原型

          本文链接:https://www.haomeiwen.com/subject/endobttx.html