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转载版
  • 相关阅读:
    天大复试机试练习_003
    C++随手记--字符串转数字
    C++标准库STL 之 我觉得应该有的方法——split
    apt-get 详解&&配置阿里源
    Nginx 图文详解
    MySQL数据库管理常用命令小结
    oracle数据库备份
    SqlServer数据库备份还原步骤
    mysql数据备份与恢复
    Tomcat架构
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035347.html
Copyright © 2011-2022 走看看