python 實現原型設計模式

2021-10-07 13:36:52 字數 4151 閱讀 5199

原型設計模式主要在當新建乙個物件的時候,覺得很麻煩,並且你又要保留當前物件。在這種情況下使用原型設計模式是乙個很好的解決辦法。

例如你寫乙個東西更新,不同的版本,這個時候以前的版本肯定要保留,並且從此基礎上進行迭代,這個時候你就需要新建乙個副本進行二次編寫或者開發,進行新功能編寫。

在我理解,設計模式是一種設計思想、解決方案,並不侷限於固定的**編寫方式,只要符合於該思想即可,所以**的實現只是乙個實現樣例,並不是唯一答案。畢竟條條道路通北京,怎麼走還是得看你自己。

想要完全的從實際業務上考慮**設計所使用的設計模式,需要豐富的專案編寫(業務邏輯處理)經驗,所以在此並不多舉例應用場景,畢竟你也有可能把乙個原型模式玩出了花。

以下例子用乙個礦泉水生產不同的外觀進行舉例。

礦泉水生產,同乙個型別可能有不同包裝版本。體積容量、包裝樣式可能一致,不同版本可能外表印刷顏色不同。

首先寫乙個類(為了方便新手,以下會說明**釋義,完整**在最下面):

class

mineralwater

: volume =

''# 體積

packing =

''# 包裝用瓶子

name =

''# 顏色

def__init__

(self, name,volume,packing)

: self.name = name

self.volume = volume

self.packing = packing

defset_name

(self, name)

: self.name = name

defget_name

(self)

:return self.name

defget_volume

(self)

:return self.volume

defget_packing

(self)

:return self.packing

類名為 mineralwater(礦泉水),有3個類成員變數:

類中一共有5個方法,初始化乙個,其餘方法為成員變數的訪問方法:

再建乙個工廠類:(這個類其實可以不用,不過為了方便說明,再次還是寫一下。讀者只需要了解其中關鍵**即可

class

factory

:def

__init__

(self, name)

: self.name = name

self.mwater = mineralwater(

'礦泉水**版'

,555

,"plastic_bottle"

)# 原型

defassembly_line

(self)

:#工廠裝配

for v in self.name:

mwater_ = copy(self.mwater)

mwater_.set_name(v)

print

('已裝配 '

, mwater_.get_name(),

' 礦泉水,容量為 '

,mwater_.get_volume(),

',包裝為:'

+ mwater_.get_packing())

print

('\n原型並未被改變: '

, self.mwater.get_name(),

' 礦泉水,容量為 '

,self.mwater.get_volume(),

',包裝為:'

+ self.mwater.get_packing(

))

factory(工廠類)中有2個方法,乙個為初始化__init__方法,乙個為assembly_line(流水線)方法。__init__方法中定義了原型,assembly_line方法實現了原型複製。

__init__初始化方法中接收乙個產品型號說明變數 name作為引數,由於之後需要遍歷這個引數,所以該引數應該設定為列表或者是元組;並且在name進行設定後,定義了乙個原型物件 mwater,mwater為**版,容量為555毫公升,包裝使用 plastic_bottle (塑料瓶)。

assembly_line流水線方法中,遍歷了傳入的列表或者元組成員資料name,每一次遍歷使用mwater_ = copy(self.mwater)複製乙個物件(copy需要引入:from copy import copy),並且使用 mwater_.set_name(v) 設定新的物件name值**(這個v為傳入的不同版本的名稱)**,隨後使用print進行輸出,每次其它相同值並不需要重新設定,只需要改變不同的值即可。最後輸出原型物件檢視其資料是否被改變。

測試**:

f = factory(

['礦泉水**版'

,'礦泉水程式設計師版'

,'礦泉水產品經理版'])

f.assembly_line(

)

執行結果:

結果發現原型並未改變,符合需求。

完整**:

from copy import copy

class

mineralwater

: volume =

''# 體積

packing =

''# 包裝用瓶子

name =

''# 顏色

def__init__

(self, name,volume,packing)

: self.name = name

self.volume = volume

self.packing = packing

defset_name

(self, name)

: self.name = name

defget_name

(self)

:return self.name

defget_volume

(self)

:return self.volume

defget_packing

(self)

:return self.packing

class

factory

:def

__init__

(self, name)

: self.name = name

self.mwater = mineralwater(

'礦泉水**版'

,555

,"plastic_bottle"

)# 原型

defassembly_line

(self)

:#工廠裝配

for v in self.name:

mwater_ = copy(self.mwater)

mwater_.set_name(v)

print

('已裝配 '

, mwater_.get_name(),

' 礦泉水,容量為 '

,mwater_.get_volume(),

',包裝為:'

+ mwater_.get_packing())

print

('\n原型並未被改變: '

, self.mwater.get_name(),

' 礦泉水,容量為 '

,self.mwater.get_volume(),

',包裝為:'

+ self.mwater.get_packing())

f = factory(

['礦泉水**版'

,'礦泉水程式設計師版'

,'礦泉水產品經理版'])

f.assembly_line(

)

python 設計模式 原型模式 原型設計模式

原型設計模式有助於隱藏該類建立例項的複雜性,在物件的概念將與從頭建立的新物件的概念不同。如果需要,新複製的物件可能會在屬性中進行一些更改。這種方法節省了開發產品的時間和資源。如何實現原型模式?現在讓我們看看如何實現原型模式。實現如下 import copy class prototype type ...

C 設計模式實現 原型模式

一 概述 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項...

C 設計模式實現 原型模式

一 概述 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項...