原型模式的目的是轉殖物件 或者 副本
類似於淺拷貝和深拷貝
淺拷貝就是 副本依賴引用
深拷貝就是 完全轉殖乙份
以下是簡單的例子
import copy
class a:
def __init__(self):
self.x = 18
self.msg = 'hello'
class b(a):
def __init__(self):
a.__init__(self)
self.y = 34
def __str__(self):
return '{}, {}, {}'.format(self.x, self.msg, self.y)
if __name__ == '__main__':
b = b()
c = copy.deepcopy(b)
print([str(i) for i in (b, c)])
print([i for i in (b, c)])
自己實現,好處是不單單 可以實現深拷貝功能,還能自定義一些 註冊 登出服務(增添和刪除功能)、
# coding: utf-8
import copy
from collections import ordereddict
class book:
def __init__(self, name, authors, price, **rest):
'''rest的例子有:出版商,長度,標籤,出版日期'''
self.name = name
self.authors = authors
self.price = price # 單位為美元
self.__dict__.update(rest)
def __str__(self):
mylist =
ordered = ordereddict(sorted(self.__dict__.items()))
for i in ordered.keys():
if i == 'price':
return ''.join(mylist)
class prototype:
def __init__(self):
self.objects = dict()
def register(self, identifier, obj):
self.objects[identifier] = obj
def unregister(self, identifier):
del self.objects[identifier]
def clone(self, identifier, **attr):
found = self.objects.get(identifier)
if not found:
raise valueerror('incorrect object identifier: {}'.format(identifier))
obj = copy.deepcopy(found)
obj.__dict__.update(attr)
return obj
def main():
b1 = book('the c programming language', ('brian w. kernighan', 'dennis m.ritchie'), price=118, publisher='prentice hall',
length=228, publication_date='1978-02-22', tags=('c', 'programming', 'algorithms', 'data structures'))
prototype = prototype()
cid = 'k&r-first'
prototype.register(cid, b1)
b2 = prototype.clone(cid, name='the c programming language(ansi)', price=48.99,
length=274, publication_date='1988-04-01', edition=2)
for i in (b1, b2):
print(i)
print('id b1 : {} != id b2 : {}'.format(id(b1), id(b2)))
if __name__ == '__main__':
main()
設計模式筆記之四 原型模式
原型模式 原型模式就是需要建立多個例項的時候,以乙個為原型,其他例項複製 轉殖這個原型來獲得相似的例項。我們的實驗室最近研究這個模式還是因為市場的原因,市場上由於長久以來的習俗和政策,對女人的需求比較大,所有我們就的擴大女人的生產線,但是由於資金的原因,我們不能投入硬體成本只能改進我們的方法。首先我...
設計原型之原型模式
實現 public class person implements cloneable public void setname string name override protected person clone throws clonenotsupportedexception 測試 publi...
python 設計模式 原型模式 原型設計模式
原型設計模式有助於隱藏該類建立例項的複雜性,在物件的概念將與從頭建立的新物件的概念不同。如果需要,新複製的物件可能會在屬性中進行一些更改。這種方法節省了開發產品的時間和資源。如何實現原型模式?現在讓我們看看如何實現原型模式。實現如下 import copy class prototype type ...