关闭

Python设计模式(十一)【原型模式】

标签: pythonprototype设计模式
1847人阅读 评论(0) 收藏 举报
分类:

人的理想志向往往和他的能力成正比

"""原型模式"""
import copy

class Prototype:

    value = 'default'

    def clone(self, **attrs):
        """克隆一个原型,并更新内部属性字典"""
        obj = copy.deepcopy(self)
        obj.__dict__.update(attrs)
        return obj

class PrototypeDispatcher:

    def __init__(self):
        self._objects = {}

    def get_objects(self):
        """获取所有对象"""
        return self._objects

    def register_object(self, name, obj):
        """注册一个对象"""
        self._objects[name] = obj

    def unregister_object(self, name):
        """注销一个对象"""
        del self._objects[name]


def main():
    dispatcher = PrototypeDispatcher()
    prototype = Prototype()

    a = prototype.clone(value='a-value', category='a')
    b = prototype.clone(value='b-value', is_checked=True)
    d = prototype.clone()

    dispatcher.register_object('objecta', a)
    dispatcher.register_object('objectb', b)
    dispatcher.register_object('default', d)
    """
    Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
    """
    #遍历元组
    #print(dispatcher.get_objects().items())
    print([{n: p.value} for n, p in dispatcher.get_objects().items()])

if __name__ == '__main__':
    main()

运行结果如图:

这里写图片描述

0
0
查看评论

Java设计模式——原型模式

原型模式是为了解决一些不必要的对象创建过程。当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了。虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些需要说明和注意的东西在里面的。文本就详细讲解一下这些注意事项吧
  • u013761665
  • u013761665
  • 2016-03-03 13:50
  • 1998

Java设计模式(五) 原型模式详解

在开发过程中,有时会遇到为一个类创建多个实例的情况,这些实例内部成员往往完全相同或有细微的差异,而且实例的创建开销比较大或者需要输入较多参数,如果能通过复制一个已创建的对象实例来重复创建多个相同的对象,这就可以大大减少创建对象的开销,这个时候就需要原型模式。
  • u013916933
  • u013916933
  • 2016-06-04 16:22
  • 3144

<六>读<<大话设计模式>>之原型模式

原型模式也是很简单的一种模式,对于java来说已经有相应的接口了(Cloneable)。关于原型模式>是以投放简历作为例子讲解的,即我要投放很多简历,其实每个简历都一样,所以只要我写好一份,其他的复制就行了,其实就是今天讲的原型模式,就是把要复制的类对象的属性复制到另外一个对象上(其实不是复制...
  • jzhf2012
  • jzhf2012
  • 2014-10-30 20:58
  • 1066

JAVA设计模式之原型模式

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接...
  • jason0539
  • jason0539
  • 2014-04-08 08:22
  • 15448

设计模式--原型模式

1.设计模式分类         所谓设计模式,是前人在开发过程中总结的经验。各自有各自的使用情况。分类条件不同 设计模式的分类也不尽相同。编程之道中大致分类如下 创建型 包括 单例设计模式,简单工厂模式,工厂方法模式 抽象工厂模式 原型模式 生成器...
  • a316212802
  • a316212802
  • 2015-11-13 18:45
  • 1002

PHP设计模式——原型模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。        用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,通过将一个原型...
  • jhq0113
  • jhq0113
  • 2015-04-25 20:59
  • 1862

原型模式(python)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。 浅拷贝(Shallow Copy):
  • ponder008
  • ponder008
  • 2011-10-10 10:30
  • 1918

23中设计模式之_原型模式(深/浅拷贝)

前言原型模式其实java Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式。 定义原型模式就是在系统clone()标记的基础上,对Clone()进行复写,不同的操作可以产生两种拷贝模式。UML类图源码分析今天我们来讲原型模式,这个模式...
  • o279642707
  • o279642707
  • 2017-03-14 17:51
  • 910

Java技术_每天掌握一种设计模式(006)_使用场景及简单实例(创建型:原型模式)

模式描述 用原型实例指定创建对象的种类,并且通过拷贝来创建新的对象。 2.模式作用 可以一定程度上解耦,消费者和对象的构造过程隔离开,对象如何构造与消费者完全无关。 可以一定程度提升效率,复杂对象的构造往往需要较长的时间(中间可能会进行复杂运算或者数据库交互),clone消耗的资源一般情况下会...
  • ooppookid
  • ooppookid
  • 2015-01-20 10:14
  • 2281

233_尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】_原型模式_prototype_浅复制_深复制_反序列化实现深复制

原型模式分为深复制和浅复制 浅复制:只是拷贝对象本身,不拷贝对象的属性,所以”浅“。复制后的对象自然在内存中位于不同的地址中,因为本质上是两个对象,所以内存中的地址自然不同。但是复制之后的对象的属性却与原对象的属性相同,也就是两个对象的属性在内存中位于同一地址,并没有拷贝出另一份。
  • jingjbuer
  • jingjbuer
  • 2015-06-15 22:55
  • 1267
    个人资料
    • 访问:1313583次
    • 积分:18802
    • 等级:
    • 排名:第583名
    • 原创:312篇
    • 转载:940篇
    • 译文:123篇
    • 评论:300条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝