四 Python 設計模式之原型模式

2021-09-02 14:55:42 字數 2302 閱讀 7325

原型模式的目的是轉殖物件 或者 副本

類似於淺拷貝和深拷貝

淺拷貝就是 副本依賴引用

深拷貝就是 完全轉殖乙份

以下是簡單的例子

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 ...