• 设计模式入门之原型模式Prototype


    //原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
    //简单来说,当进行面向接口编程时,假设须要复制这一接口对象时。因为不知道他的详细类型并且不能实例化一个接口
    //这时就须要用到原型模式,让你在不知道对象详细类型的情况下进行对象的复制
    //原型模式功能:1.通过克隆来创建新的对象实例;2.为克隆出来的对象实例复制原型实例属性的值
    //实比例如以下:(未使用Object的clone方法)用来对产品数量超过1000的订单进行分隔。分隔为容量<=1000的N个订单
    public interface OrderApi {
    	public int getOrderProductNum();
    	public void setOrderProductNum(int num);
    	public OrderApi cloneOrder();
    }
    public class PersonalOrder implements OrderApi {
    	private String customerName;
    	private String productId;
    	private int orderProductNum = 0;
    	
    	//各种get,set方法,此处略去N多字
    	public OrderApi cloneOrder() {
    		PersonalOrder order = new PersonalOrder();
    		order.setCustomerName(this.customerName);
    		order.setProductId(this.productId);
    		order.setOrderProductNum(this.orderProductNum);
    		return order;
    	}
    }
    public class OrderBusiness {//相当于Client
    	public void saveOrder(OrderApi order) {
    		//当使用Object的clone方法时。这样PersonalOrder oa1 = new PersonalOrder();
    		while(order.getOrderProductNum() > 1000) {
    			OrderApi newOrder = order.cloneOrder();
    			newOrder.setOrderProductNum(1000);
    			order.setOrderProductNum(order.getOrderProductNum(()-1000);
    			System.out.println("拆分订单="+newOrder);
    		}
    		System.out.println("订单="+order);//最后剩下不足1000的订单
    	}
    }
    //=============================================================================
    //使用Object的clone方法的实现不再写了,主要差别就是:接口是没有clone方法的
    //所以在实例化对象时就不能用原来的面向接口了
    
    //原型模式中另一个问题。即:浅度克隆和深度克隆
    //浅度克隆:能够理解为仅仅须要对原对象中的值进行克隆,假设有引用类型(对象)。则新对象中的变量是指向原对象的
    //深度克隆:不光进行浅度克隆,还要对该对象中所包括的全部引用类型(对象)进行递归克隆
    //假设要使用深度克隆,那么该对象中全部的对象都要有clone方法
    //并且假设该对象所处的层级较高,即当中包括有多种对象,对象中又包括对象,递归克隆起来可能会很麻烦
    

  • 相关阅读:
    【APUE | 10】函数signal
    【C++ Primer | 15】C++虚函数表剖析②
    【C++ Primer | 15】C++类内存分布
    VMware虚拟机 Ubuntu 16.04 安装
    主题
    【C++ Primer | 15】构造函数与拷贝控制
    08 IO库
    001 库函数【01】
    DataTable序列化及反序列化Json
    DbHelper简单的使用
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6803045.html
Copyright © 2020-2023  润新知