创新设计模式:原型模式
原型模式用于创建对象的副本。 这种模式非常有用,特别是当从头开始创建对象的成本很高时。
与builder , factory和abstract factory模式相比,它不会从头开始创建对象,而是会克隆/重新创建它。 与单例模式相比,它创建一个实例的多个副本,而单例必须确保只有一个副本存在。
想象一下一个对象的场景,要创建该对象需要非常耗费资源的方法。 它可以是具有许多联接的数据库查询,甚至可以是联合搜索的结果。
我们希望这些数据通过各种算法使用一种算法处理一个线程。 每个线程应具有其自己的原始实例副本,因为使用同一对象将导致结果不一致。
因此,我们有一个表示搜索结果的接口。
package com.gkatzioura.design.creational.prototype;public interface SearchResult {SearchResult clone();int totalEntries();String getPage(int page);
}
并且我们将FederatedSearchResult实现为SearchResult。
package com.gkatzioura.design.creational.prototype;import java.util.ArrayList;
import java.util.List;public class FederatedSearchResult implements SearchResult {private List<String> pages = new ArrayList<String>();public FederatedSearchResult(List<String> pages) {this.pages = pages;}@Overridepublic SearchResult clone() {final List<String> resultCopies = new ArrayList<String>();pages.forEach(p->resultCopies.add(p));FederatedSearchResult federatedSearchResult = new FederatedSearchResult(resultCopies);return federatedSearchResult;}@Overridepublic int totalEntries() {return pages.size();}@Overridepublic String getPage(int page) {return pages.get(page);}
}
因此,我们可以使用clone方法并根据需要创建一个非常昂贵的对象的数量创建多个副本。
您可以在github上找到源代码。
另外,我还编写了备忘单,其中包含“创作设计模式”的摘要。 在链接中注册以接收它。
翻译自: https://www.javacodegeeks.com/2018/03/creational-design-patterns-prototype-pattern.html
创新设计模式:原型模式相关推荐
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- 设计模式 原型模式_设计模式:原型
设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...
- 设计模式 原型模式_原型设计模式:创建另一个小车
设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...
- Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...
- 第六章 Caché 设计模式 原型模式
文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 精通python设计模式-浅谈Python设计模式 - 原型模式
声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...
- [设计模式]原型模式
简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...
- Java设计模式——原型模式
概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...
最新文章
- 为了远程控制:teamview检测为商用、ZeroTier + 自带远程桌面、Ping其他电脑ping不通
- html head
- shiro认证与授权:基于ini的用户授权
- POJ - 3436 ACM Computer Factory(最大流+输出残余网络)
- 2019ICPC(徐州) - so easy(并查集+离散化)
- 【云速建站】SSL证书自助部署
- python定义变量名的时候、需要注意问题_第39p,Python模块的名称空间问题,应该讲完了吧...
- python显示no matching distribution,Python使用pip安装No matching distribution found for PyYaml==5.3.1...
- 【Kafka】kafka AdminClient 闲时关闭连接
- php设置自动关机开机,设置电脑自动开机关机方法介绍
- python钓鱼评论爬取
- NodeJs 多核多进程并行框架实作 - CNode
- jeb配置java环境_android逆向工具Jeb第一次启动
- Unity3d是目前主流的游戏开发引擎
- Storyboard故事板
- 28岁大爷都能看懂261页前端面试题宝典
- 内存不能为“read” “written”的解决方法
- Linux du命令(du -h ,du -s)
- findIndex()
- Vin码查询车辆详细信息
热门文章
- Google 出的 Guava 是个什么鬼
- JavaFX UI控件教程(十)之Scroll Bar
- uni-app打包h5
- 子列表只是原列表的一个视图
- SpringBootAdmin服务端
- frameset和frame
- from + size must be less than or equal to: [10000] but was [10550]
- 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
- python简短语法_写出优雅简洁的 python 语法(二)函数传参
- spring使用自定义注解_用Spring组成自定义注释