python设计模式之原型模式

来源:互联网 发布:vb用户管理系统 编辑:程序博客网 时间:2024/06/10 07:59

python设计模式之原型模式

意图

  • 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些

适用性

  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载
  • 为了避免创建一个与产品类层次平行的工厂类层次时
  • 当一个类的实例只能有几个不同状态组合中的一种时

例子

# -*- coding=utf-8 -*-import copyclass Prototype:    def __init__(self):        self._objects = {}    def register_object(self, name, obj):        """Register an object"""        self._objects[name] = obj    def 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 obj# clientclass A(object):    def __init__(self):        self.x = 1    y = 2    def __str__(self):        return "I am A"def main():    a = A()    prototype = Prototype()    prototype.register_object('a', a)    b = prototype.clone('a', a=1, b=2, c=3)    print(a)    print(b.a, b.b, b.c)if __name__ == '__main__':    main()

如果不明白,请看下图调试信息
这里写图片描述

原创粉丝点击