python設計模式 原形設計模式

2021-09-28 12:39:00 字數 2441 閱讀 8556

(一)、什麼是原形設計模式

原型設計模式(prototype design pattern)幫助我們建立物件的轉殖,其最簡單的形式就是一 個clone()函式,接受乙個物件作為輸入引數,返回輸入物件的乙個副本。在python中,這可以 使用copy.deepcopy()函式來完成。

(二)、應用案例

(三)、實現

使用原型模式建立乙個展示圖書資訊的應用。
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 =

list()

ordered = ordereddict(

sorted

(self.__dict__.items())

)for i in ordered.keys():

'{}: {}'

.format

(i, ordered[i]))

if i ==

'price'

:'$'

)'\n'

)return

''.join(mylist)

class

prototype

:def

__init__

(self)

: self.objects =

dict()

defregister

(self, identifier, obj)

: self.objects[identifier]

= obj

defunregister

(self, identifier)

:del self.objects[identifier]

defclone

(self, identifier,

**attr)

: found = self.objects.get(identifier)

ifnot found:

raise valueerror(

'incorrect object identifier: {}'

.format

(identifier)

) obj = copy.deepcopy(found)

obj.__dict__.update(attr)

return obj

defmain()

: 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(

)

設計模式 Abstract Factory模式

還是乙個創造型模式,可以簡單的認為,創造型模式就是對使用者使用new的乙個封裝,封裝作為物件導向乙個重要的特性,它絕對不是一對大括號那麼簡單,他重要的是封裝變化點.如果沒有變化,那就別封裝吧,直接讓使用者new吧,這樣效率是最高的,但因為會有變化,所以才會有物件導向和設計模式.抽象工廠是應對這樣的一...

設計模式 abstract factory模式

含義 抽象工廠將 抽象零件 組裝成 抽象產品 理解 相比於工廠方法模式,可以根據不同的介面建立不同的產品,說白了就是將乙個介面變成兩個介面,各自返回不同的抽象產品 例子 class car 抽象產品 class bencicar public car class baomacar public ca...

JAVA設計模式(十七)設計模式之策略設計模式

本章講解設計模式中策略設計模式的相關知識 1.概念 在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 contex...