python
設計模式
原型模式
import copy class Prototype:    def __init__(self):       self.obj = {}    def Registor(self, key,new_obj):       self.obj[key] = new_obj    def UnRegistor(self, key):       del self.obj[key]   def DeepClone(self, name, **attr):       obj_clone = copy.deepcopy(self.obj.get(name))       obj_clone.__dict__.update(attr)       return obj_clone    def Clone(self, name, **attr):       obj_clone = copy.copy(self.obj.get(name))       obj_clone.__dict__.update(attr)       return obj_clone 
class a:    def __init__(self):       self.name = ['a1','a2'] 
class b:    def __init__(self):       self.name = 'b' 
a = a() b = b() 
P = Prototype()P.Registor('a',a)
P.Registor('b',b)
aDeepClone = P.DeepClone('a') aClone = P.Clone('a')a.name[0] = 'new_a' 
bDeepClone = P.DeepClone('a') bClone = P.Clone('a') b.name = 'new_b' 
print('A DeepClone') print(a.name, aDeepClone.name) print('A Clone')
print(a.name, aClone.name) print('----------------------') print('B DeepClone') print(b.name, bDeepClone.name) print('B Clone') print(b.name, bClone.name)
P.UnRegistor('b')
程式碼說明:
在python實作prototype需要使用copy模組來實行,在做深層複製時沒有問題,在做淺層複製時,若複製對象不是list對於結果會有錯誤的預期
prototype類別定義prototype的工作,複製、註冊物件、刪除物件。
定義需要複製的類別A、類別B,並註冊到prototype物件中
類別A為list形式
類別B為字串形式
分別進行深層複製、淺層複製。
在修蓋內容,list則修正部分,會發現到list跟一般定義的深層複製、淺層複製結果會一樣,但在一般變數的部分則不。
需要探討為什麼複製結果會這樣。
在python實作prototype需要使用copy模組來實行,在做深層複製時沒有問題,在做淺層複製時,若複製對象不是list對於結果會有錯誤的預期
prototype類別定義prototype的工作,複製、註冊物件、刪除物件。
定義需要複製的類別A、類別B,並註冊到prototype物件中
類別A為list形式
類別B為字串形式
分別進行深層複製、淺層複製。
在修蓋內容,list則修正部分,會發現到list跟一般定義的深層複製、淺層複製結果會一樣,但在一般變數的部分則不。
需要探討為什麼複製結果會這樣。
留言
張貼留言