設計模式之python版(六)–原型模式

來源:互聯網
上載者:User

原型模式:

應用特性:需要大量的基於某個基礎原型進行微量修改而得到新原型時使用。

結構特性:對象的複製機制【淺複製和深複製】

UML:

#!/usr/bin/env python  #encoding: utf-8  from copy import copy, deepcopyclass test_obj:    def __init__(self, id):        self.id = id    class proto_type:    def __init__(self, name, id):        self.name = name        self.obj = test_obj(id)        def display(self):        print self.name        print self.obj.id    def clone(self):        return copy(self)        def deep_clone(self):        return deepcopy(self)          if '__main__' == __name__:      obj1 = proto_type('name1', 1)    obj2 = obj1.clone()    obj3 = obj1.deep_clone()    obj2.name = 'name2'    obj2.obj.id = 2    obj3.name = 'name3'    obj3.obj.id = 3     obj1.display()    obj2.display()    obj3.display()    print obj1.__class__    print obj2.__class__    print obj3.__class__  

結果:

name12        #因為obj2是淺複製,所以對象沒有被複製,導致新對象的修改影響了原來的就對象的值name22name33       #因為是深複製,所以不會影響之前的舊對象__main__.proto_type__main__.proto_type__main__.proto_type

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.