zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【创建模式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转载版
  • 相关阅读:
    初识多线程
    java开发中我们经常用到的一些名词
    gitHub提交代码
    Java-基础-HashMap
    Java-基础-LinkedList
    Java-基础-ArrayList
    Java-基础-JDK动态代理
    Java-基础-反射
    RabbitMQ-延迟队列
    RabbitMQ-TTL-死信队列_DLX
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035347.html
Copyright © 2011-2022 走看看