设计模式入门之原型模式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方法
//并且假设该对象所处的层级较高,即当中包括有多种对象,对象中又包括对象,递归克隆起来可能会很麻烦
设计模式入门之原型模式Prototype的更多相关文章
- Net设计模式实例之原型模式( Prototype Pattern)
一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...
- 设计模式系列之原型模式(Prototype Pattern)——对象的克隆
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 设计模式学习心得<原型模式 Prototype >
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式是实现了一个原型接口,该接口用于创建当 ...
- IOS设计模式浅析之原型模式(Prototype)
原型模式的定义 “使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”.最初的定义出现于<设计模式>(Addison-Wesley,1994). 简单来理解就是根据这个原型创建 ...
- 《JAVA设计模式》之原型模式(Prototype)
在阎宏博士的<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办 ...
- [工作中的设计模式]原型模式prototype
一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ...
- 设计模式(四)原型模式Prototype(创建型)
设计模式(四)原型模式Prototype(创建型) 1. 概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象 ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...
- PHP设计模式 原型模式(Prototype)
定义 和工厂模式类似,用来创建对象.但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建. 场景 大对象的创建. 优点 1.可以在运行时刻增加和删除产品 2.可以改变值或结构 ...
随机推荐
- this version of SLF4J requires log4j version 1.2.12 or later.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFacto ...
- Hive元数据启动失败
Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocke ...
- appium之toast处理
注意 toast要appium1.6.3以上版本才支持,Android 5.0以上(需使用夜神多开模拟器),jdk1.8且配置了环境变量. toast定位 1.先看下toast长什么样,如下图,像这种 ...
- OmniGraffler软件和激活码
mac上用户画图的软件:OmniGraffler破解方法 1.激活码 Name: Appked SN: MFWG-GHEB-HYTW-CGHT-CSXU-QCNC-SXU 2.软件连接 链接: htt ...
- 设置 mysql事物隔离级别
SET [GLOBAL | SESSION] TRANSACTION transaction_property [, transaction_property] ... transaction_pro ...
- hdu2083
开始忘排序了. #include <stdio.h> #include <math.h> #include <algorithm> using namespace ...
- hdu 4764 巴什博弈
Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 使用Apriori算法进行关联分析
关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以有两种形式:频繁项集或者关联规则.频繁项集是指经常出现在一块的物品的集合,关联规则暗示两种物品之间可能存在很强的关系.一个项集的支持度被定 ...
- cf487C Prefix Product Sequence
Consider a sequence [a1, a2, ... , an]. Define its prefix product sequence . Now given n, find a per ...
- mysql语句优化方案(网上流传)
关于mysql处理百万级以上的数据时如何提高其查询速度的方法 最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法. 由于在参与的实际项目中发现当mysql表的数 ...