原型模式用于创建对象的副本。 这种模式非常有用,特别是当从头开始创建对象的成本很高时。
与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

创新设计模式:原型模式相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  6. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  7. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  8. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  9. [设计模式]原型模式

    简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...

  10. Java设计模式——原型模式

    概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...

最新文章

  1. 为了远程控制:teamview检测为商用、ZeroTier + 自带远程桌面、Ping其他电脑ping不通
  2. html head
  3. shiro认证与授权:基于ini的用户授权
  4. POJ - 3436 ACM Computer Factory(最大流+输出残余网络)
  5. 2019ICPC(徐州) - so easy(并查集+离散化)
  6. 【云速建站】SSL证书自助部署
  7. python定义变量名的时候、需要注意问题_第39p,Python模块的名称空间问题,应该讲完了吧...
  8. python显示no matching distribution,Python使用pip安装No matching distribution found for PyYaml==5.3.1...
  9. 【Kafka】kafka AdminClient 闲时关闭连接
  10. php设置自动关机开机,设置电脑自动开机关机方法介绍
  11. python钓鱼评论爬取
  12. NodeJs 多核多进程并行框架实作 - CNode
  13. jeb配置java环境_android逆向工具Jeb第一次启动
  14. Unity3d是目前主流的游戏开发引擎
  15. Storyboard故事板
  16. 28岁大爷都能看懂261页前端面试题宝典
  17. 内存不能为“read” “written”的解决方法
  18. Linux du命令(du -h ,du -s)
  19. findIndex()
  20. Vin码查询车辆详细信息

热门文章

  1. Google 出的 Guava 是个什么鬼
  2. JavaFX UI控件教程(十)之Scroll Bar
  3. uni-app打包h5
  4. 子列表只是原列表的一个视图
  5. SpringBootAdmin服务端
  6. frameset和frame
  7. from + size must be less than or equal to: [10000] but was [10550]
  8. 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
  9. python简短语法_写出优雅简洁的 python 语法(二)函数传参
  10. spring使用自定义注解_用Spring组成自定义注释