zoukankan      html  css  js  c++  java
  • 设计模式入门之原型模式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方法
    //并且假设该对象所处的层级较高,即当中包括有多种对象,对象中又包括对象,递归克隆起来可能会很麻烦
    

  • 相关阅读:
    Read-Copy Update Implementation For Non-Cache-Coherent Systems
    10 华电内部文档搜索系统 search04
    10 华电内部文档搜索系统 search05
    lucene4
    10 华电内部文档搜索系统 search01
    01 lucene基础 北风网项目培训 Lucene实践课程 索引
    01 lucene基础 北风网项目培训 Lucene实践课程 系统架构
    01 lucene基础 北风网项目培训 Lucene实践课程 Lucene概述
    第五章 大数据平台与技术 第13讲 NoSQL数据库
    第五章 大数据平台与技术 第12讲 大数据处理平台Spark
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6803045.html
Copyright © 2011-2022 走看看