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转载版
  • 相关阅读:
    Centos6.8部署jumpserver(完整版)
    Linux系统下inode满了导致无法写文件的解决思路
    MySQL5.7.20报错Access denied for user 'root'@'localhost' (using password: NO)
    深浅拷贝
    集合
    列表 元组 range
    机器码和字节码
    函数
    文件操作
    小数据池和代码块
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035347.html
Copyright © 2011-2022 走看看