1. 原型模式(Prototype)介绍

UML类图


原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需主要实现clone方法。

原型模式是一种比较简单的模式,也非常容易理解。在实际应用中,原型模式很少单独出现,经常与其他模式混用。

原型模式的优点及适用场景

  • 使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

  • 使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。

  • 因为以上优点,所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。

原型模式的注意事项

  • 使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。
  • clone方法需要深拷贝。

2. 示例

'''Prototype Pattern with Python Code
'''import copyclass Prototype(object):def __init__(self):self._objects = {}def register_object(self, name, obj):"""Register an object"""self._objects[name] = objdef unregister_object(self, name):"""Unregister an object"""del self._objects[name]def clone(self, name, **attr):"""Clone a registered object and update inner attributes dictionary"""obj = copy.deepcopy(self._objects.get(name))obj.__dict__.update(attr)return objclass Client(object):def main(self):class A:passa = A()prototype = Prototype()prototype.register_object('a', a)b = prototype.clone('a', a=1, b=2, c=3)prototype.register_object('b', b)c = prototype.clone('b', c=5, d=6)print(b.a, b.b, b.c)print(c.a, c.b, c.c, c.d)if __name__ == '__main__':Client().main()

输出

# ./Prototype.py
1 2 3
1 2 5 6

参考:
https://www.jianshu.com/p/dac8e8e96452
https://wiki.jikexueyuan.com/project/java-design-pattern/prototype-pattern.html

python设计模式5-原型模式相关推荐

  1. Python设计模式之原型模式(4)

    原型模式(Prototype Pattern):复制已有的对象,实现功能复用和优化 1 介绍 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属 ...

  2. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  3. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  4. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  5. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  6. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  7. 【GOF23设计模式】原型模式

    [GOF23设计模式]原型模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 1 pa ...

  8. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  9. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  10. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

最新文章

  1. MySQL如何利用索引优化ORDER BY排序语句
  2. 1.01 与 37.8
  3. ES6 new syntax of Default Function Parameters
  4. 板邓:PHP获取当前页面url地址、参数
  5. live555推流rtsp_Hi3518 RTSP推流
  6. allegro放置器件无法放_洗衣机放卫生间,这几种赶紧学起
  7. 这样的书 我改怎么起名呢?
  8. 获取Windows 10(1)
  9. Windows系统目录下文件夹汇总
  10. 基于SNMP的网络管理软件设计方案和实现
  11. x509证书,SSL详解
  12. tensorflow 77 tensorflow android版本demo win10 下 编译
  13. scjp java程序员_Sun认证Java程序员(SCJP)考试
  14. 乔布斯斯坦福大学演讲英文原文
  15. 关于UVC PTZ功能
  16. 我在工作群和ChatGPT聊了会天,找到了升职加薪的新思路
  17. 【N32G457】基于RT-Thread和N32G457的墨水屏日历
  18. pccad无法找到所需的动态链接库_请教天正给排水8.2问题(tch_initstart.arx 无法找到所需的动态链接库或其他文件)...
  19. 免费网络管理流量监控软件大比拼
  20. MATLAB电动空调模型/压缩机制冷空调模型/压缩机等空调系统cad二维图

热门文章

  1. 分布式数据库中间件概念
  2. redis 3.0的集群部署
  3. 国内开源社区软件 PHPWind 团队已解散
  4. LoadRunner解决“服务器正在运行中”方法
  5. dotnetnuke|dnn 内网实现自动登录
  6. 检测浏览器是否支持WebSocket
  7. 求字符串中字符的出现的最多次数和最少次数,删除后并获得最终字符
  8. 齐博cms任意登陆漏洞
  9. SpringBoot整合ElasticSearch实现多版本的兼容
  10. php: 0跟字符串做比较永远是true。 php大bug。