C 設計模式 Prototype原型模式

2021-07-03 20:04:46 字數 2085 閱讀 1825

作用

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

prototype模式提供了乙個通過已存在物件進行新物件建立的介面(clone), clone()實現和具體的語言相關,在c++中通過拷貝建構函式實現。

uml圖如下:

**如下:

prototype.h

1

#ifndef _prototype_h_

2#define _prototype_h_34

/*prototype模式提供了乙個通過已存在物件進行新物件建立的介面(clone)

5clone()實現和具體的語言相關,在c++中通過拷貝建構函式實現67

作用:8

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。910

*/11

12/*

prototype原型基類,定義clone介面函式

13*/

14class

prototype15;

2223

//派生自prototype,實現其介面函式

24class concreteprototype1:public

prototype25;

3233

//派生自prototype,實現其介面函式

34class concreteprototype2:public

prototype35;

4243

#endif

prototype.cpp

1 #include "

prototype.h

"2 #include "

iostream"3

4using

namespace

std;56

////prototype

7prototype::prototype()811

12 prototype::~prototype()

1316

17//

concreteprototype1

18concreteprototype1::concreteprototype1()

1922

23 concreteprototype1::~concreteprototype1()

2427

28 concreteprototype1::concreteprototype1(const concreteprototype1&cp)

2932

33 prototype* concreteprototype1::clone() const

3437

38//

concreteprototype2

39concreteprototype2::concreteprototype2()

4043

44 concreteprototype2::~concreteprototype2()

4548

49 concreteprototype2::concreteprototype2(const concreteprototype2&cp)

5053

54 prototype* concreteprototype2::clone() const

55

main.cpp

1 #include "

prototype.h

"2 #include 3

using

namespace

std;45

intmain()

6

prototype模式和builder模式、abstractfactory模式都是通過乙個類(物件例項)來專門負責物件的建立工作(工廠物件),它們之間的區別是:builder模式重在複雜物件的一步步建立(並不直接返回物件),abstractfactory模式重在產生多個相互依賴類的物件,而prototype模式重在從自身複製自己建立新類。

C 設計模式之Prototype

一 功能 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。二 結構圖 三 優缺點 優點 複製自身。客戶不知道需要物件的實際型別,只需知道它的抽象基類即可。即有繼承樹的情況 缺點 必須先有乙個物件例項 即原型 才能clone。四 示例 namespace designpattern p...

C 設計模式之Prototype

c 設計模式之prototype 2002 08 01 com集中營 一 功能 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。二 結構圖 三 優缺點 優點 複製自身。客戶不知道需要物件的實際型別,只需知道它的抽象基類即可。即有繼承樹的情況 缺點 必須先有乙個物件例項 即原型 才能c...

設計模式 Prototype

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