• 原型设计模式


    模式特点:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    
    程序实例:从简历原型,生成新的简历
    
    代码特点:简历类Resume提供的Clone()方法其实并不是真正的Clone,只是为已存在对象增加了一次引用。
    
         Python为对象提供的copy模块中的copy方法和deepcopy方法已经实现了原型模式,但由于例子的层次较浅,二者看不出区别。
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # 这里肯定要做深拷贝,要不然python的就是对象的引用
    from copy import deepcopy
    
    
    class Client:
        def __init__(self):
            self.x = 1
            self.y = 3
            self.z = 'hello'
            self._foo = 'private'
    
        def __str__(self):
           return '
    '.join(['{}: {}'.format(key, value) for key, value in self.__dict__.items() if not key.startswith('_')])
    
    
    class Prototype:
        def __init__(self):
            self._objs = {}
    
        def registerObject(self, name, obj):
            """注册对象"""
            self._objs[name] = obj
    
        def unregisterObject(self, name):
            """取消注册"""
            del self._objs[name]
    
        def clone(self, name, **attr):
            """克隆对象"""
            try:
                obj = deepcopy(self._objs[name])
                # 但是会根据attr增加或覆盖原对象的属性
                obj.__dict__.update(attr)
                return obj
            except Exception as e:
                pass
    
    
    if __name__ == '__main__':
        client = Client()
        prototype = Prototype()
        prototype.registerObject("client", client)
        client_b = prototype.clone("client", foo="zhangsan", price=80)
    
        print(id(client), client)
        print(id(client_b), client_b)

  • 相关阅读:
    MYSQL函数 Cast和convert的用法详解
    MySQL5.7.9(GA)的安装
    TMS Scripter importtool的使用
    MySQL 高可用架构在业务层面的应用分析
    UNIGUI:How to redirect and close session?
    HTML URL 编码:请参阅:http://www.w3school.com.cn/tags/html_ref_urlencode.html
    js 解决函数加载的问题
    必备函数
    Action 分离
    JavaScript.Remove
  • 原文地址:https://www.cnblogs.com/renfanzi/p/6031539.html
Copyright © 2020-2023  润新知