設計模式學習系列6 原型模式(prototype)

2022-03-06 02:46:17 字數 2090 閱讀 4257

原型模式(prototype)用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。允許乙個物件再建立另外乙個新物件的時候根本無需知道任何建立細節,只需要請求圓形物件的copy函式皆可。

1原型模式構成

客戶(client)角色:客戶類提出建立物件的請求。

抽象原型(prototype)角色:這是乙個抽象角色,c++實現的抽象類,此角色給出所有的具體原型類所需的介面。

具體原型(concrete prototype)角色:被複製的物件。此角色需要實現抽象原型角色所要求的介面。

2原型模式c++實現

(1)通過c++的拷貝建構函式實現

(2)clone()函式返回的類是基類,建議通過static_const<>()進行轉換為子類

(3)原型模式實現過程中會涉及淺拷貝和深拷貝的問題,clone()編寫的時候要注意

(4)原型模式建立新的物件簡單了很多,只需要根據原型就可以獲得,不過使用原型的時候內存在clone內部開闢,要記得釋放

1:
2:  

/*設計模式學習系列之原型模式

3:  

* 參考書籍《大話設計模式》

4:  

* 通過明確的clone()來創造新物件,不需要知道建立的任何細節

5:  

*/

6:  #include
7:  

using

namespace std ;

8:  

//介面類

9:  

class prototype

10:  ;
14:
15:  

struct ststruct

16:
25:  };
26:  

class prototypea:public prototype

27:
35:      ~prototypea()
36:
38:  

//引數建構函式1

39:      prototypea(const

int& _a , const

string& _str ):a(_a),str(_str)

40:
43:  

//引數建構函式

44:      prototypea(const prototypea& _proto)
45:
49:
50:  

//clone()函式 深拷貝

51:      prototype* clone() const
52:
56:
57:  

void show()

58:
61:
62:  

void seta(const

int& _a)

63:
66:
67:  

void setstr(const

string& _str)

68:
71:  };
72:
73:  

int main()

74:
3涉及到的c++知識點(1)c++深拷貝和淺拷貝(2)c++類 拷貝賦值建構函式

細雨淅淅 標籤: 設計 模式

設計模式 6 原型模式

有時需要生成多個相同的物件,最普通的方法就是就是用相同的屬性new相同的物件 public class main class chicken 這樣做的缺點是,如果需要修改乙個屬性,其他物件的屬性就要跟著改一遍,有乙個便捷的方法,就是採用 原型模式,從乙個物件再建立另外乙個可定製的物件,不需要知道任何...

設計模式 6 原型模式

1996年7月5日,英國科學家伊恩 威爾穆特博士成功的轉殖出了乙隻小羊,小羊與它的 母親 一模一樣。這只小羊的名字就是dolly。dolly是由 不要認為介紹多莉轉殖的故事和本文牛頭不對馬嘴,事實上多少還是有點關係的。1.什麼是原型模式?原型模式就是用來建立重複的物件,再直白一點 複製貼上的原理。怎...

設計模式系列 原型模式 Prototype

意圖 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。場景 遊戲場景中的有很多相似的敵人,它們的技能都一樣,但是隨著敵人出現的位置不同,這些人的能力不太一樣。假設,我們現在需要把三個步兵組成一隊,其中還有乙個精英步兵,能力特別高。那麼,你或許可以建立乙個敵人抽象類,然後對於不同能力的...