原型設計模式主要在當新建乙個物件的時候,覺得很麻煩,並且你又要保留當前物件。在這種情況下使用原型設計模式是乙個很好的解決辦法。
例如你寫乙個東西更新,不同的版本,這個時候以前的版本肯定要保留,並且從此基礎上進行迭代,這個時候你就需要新建乙個副本進行二次編寫或者開發,進行新功能編寫。
在我理解,設計模式是一種設計思想、解決方案,並不侷限於固定的**編寫方式,只要符合於該思想即可,所以**的實現只是乙個實現樣例,並不是唯一答案。畢竟條條道路通北京,怎麼走還是得看你自己。
想要完全的從實際業務上考慮**設計所使用的設計模式,需要豐富的專案編寫(業務邏輯處理)經驗,所以在此並不多舉例應用場景,畢竟你也有可能把乙個原型模式玩出了花。
以下例子用乙個礦泉水生產不同的外觀進行舉例。
礦泉水生產,同乙個型別可能有不同包裝版本。體積容量、包裝樣式可能一致,不同版本可能外表印刷顏色不同。
首先寫乙個類(為了方便新手,以下會說明**釋義,完整**在最下面):
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 設計模式實現 原型模式
一 概述 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項...