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转载版
  • 相关阅读:
    webpack-dev-server
    python 基础语言 学习笔记
    react 避免重复渲染
    获取cookie
    解决 canvas 在高清屏中绘制模糊的问题
    h5页面点击事件ios没反应 移动端兼容性问题
    rem 刷新闪烁问题
    谷歌禁止input自动填充表单信息
    react 循环产生定时器
    IOS开发-UI学习-UIWebView,简单浏览器的制作
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035347.html
Copyright © 2011-2022 走看看