Python设计模式(十一)【原型模式】

人的理想志向往往和他的能力成正比

"""原型模式"""
import copy

class Prototype:

    value = 'default'

    def clone(self, **attrs):
        """克隆一个原型,并更新内部属性字典"""
        obj = copy.deepcopy(self)
        obj.__dict__.update(attrs)
        return obj

class PrototypeDispatcher:

    def __init__(self):
        self._objects = {}

    def get_objects(self):
        """获取所有对象"""
        return self._objects

    def register_object(self, name, obj):
        """注册一个对象"""
        self._objects[name] = obj

    def unregister_object(self, name):
        """注销一个对象"""
        del self._objects[name]


def main():
    dispatcher = PrototypeDispatcher()
    prototype = Prototype()

    a = prototype.clone(value='a-value', category='a')
    b = prototype.clone(value='b-value', is_checked=True)
    d = prototype.clone()

    dispatcher.register_object('objecta', a)
    dispatcher.register_object('objectb', b)
    dispatcher.register_object('default', d)
    """
    Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
    """
    #遍历元组
    #print(dispatcher.get_objects().items())
    print([{n: p.value} for n, p in dispatcher.get_objects().items()])

if __name__ == '__main__':
    main()

运行结果如图:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值