• 【编程思想】【设计模式】【创建模式creational】原形模式Prototype


    Python版

    https://github.com/faif/python-patterns/blob/master/creational/prototype.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    *TL;DR80
    Creates new object instances by cloning prototype.
    """
    
    
    class Prototype(object):
    
        value = 'default'
    
        def clone(self, **attrs):
            """Clone a prototype and update inner attributes dictionary"""
            # Python in Practice, Mark Summerfield
            obj = self.__class__()
            obj.__dict__.update(attrs)
            return obj
    
    
    class PrototypeDispatcher(object):
    
        def __init__(self):
            self._objects = {}
    
        def get_objects(self):
            """Get all objects"""
            return 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 main():
        dispatcher = PrototypeDispatcher()
        prototype = Prototype()
    
        d = prototype.clone()
        a = prototype.clone(value='a-value', category='a')
        b = prototype.clone(value='b-value', is_checked=True)
        dispatcher.register_object('objecta', a)
        dispatcher.register_object('objectb', b)
        dispatcher.register_object('default', d)
        print([{n: p.value} for n, p in dispatcher.get_objects().items()])
    
    
    if __name__ == '__main__':
        main()
    
    ### OUTPUT ###
    # [{'objectb': 'b-value'}, {'default': 'default'}, {'objecta': 'a-value'}]
    Python转载版
  • 相关阅读:
    UVA 11354
    HDU 4081 Qin Shi Huang's National Road System 最小/次小生成树的性质
    UVA 10269 Adventure of Super Mario floyd dp
    UVA 11280 Flying to Fredericton 最短路DP
    【专题】树状数组
    【专题】Subsequence
    共享python代码模块
    完全背包
    POJ 3253 Fence Repair
    POJ 3069 Saruman's Army
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035347.html
Copyright © 2020-2023  润新知