設計模式 Prototype

2021-07-02 19:41:04 字數 1320 閱讀 5631

原型也是一種建立型模式,考慮下面的場景:

乙個類有1,2,3,4,5,6,7,8種狀態,在執行過程中經過了以下1->2->3->4的狀態轉換,且進入到狀態4時必須要經過1,2,3的狀態轉換。

在進入狀態4後,可以向5,6,7,8狀態轉換。

此時要對此物件做白盒測試,1->4是乙個固定的流程,很顯然,從乙個狀態已經到4的物件開始複製一堆物件開始去做測試比new一堆物件再分別切換到5,6,7,8要方便得多。

prototype跟其他建立型模式相比最大的特點就是複製物件,保留已有物件的狀態。

在c++中使用拷貝建構函式就可以實現此功能。

class prototype

private:

char *name;

};

而python則可以用更簡單的方式deepcopy做到

import copy

class

dp(object):

def__init__

(self):

self.x = 100

class

handler

(object):

def__init__

(self):

self.x = 100

self.dp = dp()

class

prototype

(object):

def__init__

(self):

self.x = 100

self.h = handler()

if __name__ == '__main__':

p = prototype()

pa = p

ps = copy.copy(p)

pd = copy.deepcopy(p)

p.x = 120

p.h.x = 120

p.h.dp.x = 120

print(p.x, p.h.x, p.h.dp.x)

print(pa.x, pa.h.x, pa.h.dp.x)

print(ps.x, ps.h.x, ps.h.dp.x)

print(pd.x, pd.h.x, pd.h.dp.x)

列印結果如下, 可以看到=號的結果只是同樣的引用,copy重新生成了prototype,但是handler也是同樣引用;而deepcopy則是逐級重新了新的物件:

(120, 120, 120)

(120, 120, 120)

(100, 120, 120)

(100, 100, 100)

設計模式 Prototype

感覺這個模式比較之無聊,至少是自己尚未碰到過它的應用,可能對物件的拷貝進行了進一步的封裝,拷貝方式可做成深拷貝和淺拷貝 class prototype operation virtual clone class concreteprototype public prototype operattio...

設計模式 Prototype

一.概述 定義 用原型例項指定建立物件的種類,並且通過 拷貝 這些原型建立新的物件。換句話說,就是不用重新初始化物件,而是動態地獲得物件執行時的狀態。再說明白點,就是要乙個拷貝過建構函式類似功能的介面。結構圖如下 如下 cpp 原型類,有乙個clone介面 class prototype virtu...

設計模式 Prototype

include using namespace std 虛擬基類,所有原型的基類,提供clone介面函式 class prototype virtual prototype virtual prototype clone 0 派生自prototype,實現clone方法 class concrete...