• 原型模式


    意图:
    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
     
    适用性:
    当要实例化的类是在运行时刻指定时,例如,通过动态装载;
    或者为了避免创建一个与产品类层次平行的工厂类层次时;
    或者当一个类的实例只能有几个不同状态组合中的一种时。
    建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
     
    示例代码:
    #-*- coding:utf-8 -*-
    '''
    Prototype
    '''
    import copy
    
    class 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
     
    def main():
        class A:
            def __str__(self):
                return "I am A"
     
        a = A()
        prototype = Prototype()
        prototype.register_object('a', a)
        b = prototype.clone('a', a=1, b=2, c=3)
     
        print(a)
        print(b.__dict__)
        print(b.a, b.b, b.c)
     
    if __name__ == '__main__':
        main()
    执行结果:
    通过执行结果我们可以看出:通过一个类的方法复制a对象,进行a对象的变量赋值
     

  • 相关阅读:
    UVa 439,Knight Moves
    UVa127,"Accordian" Patience
    UVa11882,Biggest Number
    UVa1599,Ideal Path
    我什么时候才能脱离题解....
    UVa208,Firetruck
    UVa1600,Patrol Robot
    UVa12325, Zombie's Treasure Chest
    随笔
    UVa11054
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123981.html
Copyright © 2020-2023  润新知