1. 应用场景

如果一个对象的创建总是由几种固定组件不同方式组合而成; 如果对象之间仅仅实例属性不同。将不同情况的对象缓存起来,直接克隆使用。也许这比采用传递参数重新 new 一个对象要来的快一些与工厂模式的区别:原型模式相当于”改进版的工厂模式”:对象实现了Clonnable()接口,加入了 java 反射机制,去掉了工厂模式繁多的子类

2.概念

使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。

3. Class Diagram

(1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。

(2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。

(3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。

4. Implementation

public abstract class Prototype {abstract Prototype myClone();
}
public class ConcretePrototype extends Prototype {private String filed;public ConcretePrototype(String filed) {this.filed = filed;}@OverridePrototype myClone() {return new ConcretePrototype(filed);}@Overridepublic String toString() {return filed;}
}
public class Client {public static void main(String[] args) {Prototype prototype = new ConcretePrototype("abc");Prototype clone = prototype.myClone();System.out.println(clone.toString());}
}运行结果:
abc

5. 优点和缺点

5.1 优点

  • 向客户隐藏制造新实例的复杂性
  • 提供让客户能够产生未知类型对象的选项
  • 在某些环境下,复制对象比创建对象更有效。

5.2 用途和缺点

  • 在一个复制的类层次中,当系统必须从其中的许多类型创建对象时,可以考虑原型。
  • 使用原型模式的缺点:对象的复制有时相当复杂。

6. JDK

  • java.lang.Object#clone()

Java设计模式(二十二):原型设计模式相关推荐

  1. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  2. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...

  3. (原创)无废话C#设计模式之二十二:总结(针对GOF23)

    无废话C#设计模式之二十二:总结(针对GOF23) 比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 ...

  4. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  5. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  6. (原创)无废话C#设计模式之十二:Bridge

    无废话C#设计模式之十二:Bridge 意图 将抽象部分与实现部分分离,使它们都可以独立的变化. 场景 还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决.现在的问题就是, ...

  7. 设计模式(十二)—— 享元模式

    设计模式(十二)-- 享元模式 定义 结构 案例实现 优缺点和使用场景 JDK源码解析 定义 运用共享技术来有效地支持大量细粒度对象的复用.它通过共享已经存在的对象来大幅度减少需要创建的对象数量.避免 ...

  8. 云计算设计模式(十二)——索引表模式

    云计算设计模式(十二)--索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主 ...

  9. 大话设计模式笔记(二十一、二十二、二十三、二十四、二十五、二十六)

    二十一.单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是 ...

  10. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

最新文章

  1. Python:计算两个蛋白或小分子之间的RMSD
  2. CSS3秘笈第三版涵盖HTML5学习笔记6~8章
  3. Stm 32 IAP 在线 升级IAP 的 操作
  4. arcgis渔网分割提取栅格图_【操作】ArcGIS中字段的合并、分割、提取
  5. rtmp协议分析(三次握手)
  6. php 商品展示html,HTML5和CSS3实现3D展示商品信息的代码
  7. thinkphp去重,distinct、group
  8. CLR,通用语言运行时库
  9. 国内统一Android应用市场,最全最干净的安卓应用市场
  10. sublime快捷键(mac版)一览
  11. 汕头大学计算机专业就业,汕头大学毕业生最后怎样了?17%进入世界和中国500强,月薪5185元...
  12. 基于Ip的刷投票排名及刷百度推广的自动化实现
  13. 清华教授发文劝退读博:​​我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!...
  14. 图形轨迹c语言,OpenCV识别图像上的线条轨迹
  15. Teardrop攻击 —— 创建虚假的IP数据包
  16. 企业研发人员配备比例_如何理解高新技术企业认定对研发人员比例的要求
  17. 三天搞定射频识别技术(一)1.2
  18. ESP32-S2 SGM58031-热敏电阻电压转温度
  19. Navicat导出链接查看数据库明文密码
  20. 名帖335 智永 草书《真草千字文》

热门文章

  1. layer.js载入失效问题
  2. 使用nginx进行负载均衡
  3. 织梦cms系统如何code 财付通接口
  4. String, StringBuffer, StringBuilder(转载)
  5. 3G,三足鼎立;花开千朵,各表一枝!!!
  6. *13.图的存储方式
  7. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍
  8. 2019CCF自主可控计算机大会召开 中科院院士吁自力更生
  9. CAN总线基础(三)
  10. string 与char *的区别