設計模式(九)原型模式 Prototype

2021-07-09 02:16:02 字數 2149 閱讀 8163

1.介紹/作用:

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

其中有乙個詞很重要,那就是拷貝(深拷貝)。可以說,拷貝是原型模式的精髓所在。

2.應用場景:

示例1:

找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項,那麼所有已寫好的簡歷都要修改,工作量很大。隨著科技的進步,出現了列印裝置。我們只需手寫乙份,然後利用列印裝置影印多份即可。如果要修改簡歷中的某項,那麼修改原始的版本就可以了,然後再影印。原始的那份手寫稿相當於是乙個原型,有了它,就可以通過影印(拷貝)創造出更多的新簡歷。這就是原型模式的基本思想。

示例2:

假設有一家店鋪是配鑰匙的,他對外提供配製鑰匙的服務(提供clone介面函 

數),你需要配什麼鑰匙它不知道只是提供這種服務,具體需要配什麼鑰匙只有到了真正看到鑰匙 

的原型才能配好。也就是說,需要乙個提供這個服務的物件,同時還需要乙個原型(prototype),不 

然不知道該配什麼樣的鑰匙。

3.uml類圖

4.實現**

#ifndef _prototype_h_

#define _prototype_h_

#include using namespace std;

class prototype

~prototype(){}

virtual prototype* clone() = 0;

virtual void operation() = 0;

private:

};class concreteprototypea :public prototype

~concreteprototypea(){}

//拷貝建構函式

concreteprototypea(const concreteprototypea& pconcreteprototypea)

virtual prototype* clone()

virtual void operation()

private:

};class concreteprototypeb :public prototype

~concreteprototypeb(){}

//拷貝建構函式

concreteprototypeb(const concreteprototypeb& pconcreteprototypea)

virtual prototype* clone()

virtual void operation()

private:

};#endif

client**:

concreteprototypea* pconcreteprototypea = new concreteprototypea();

prototype* pprototype = pconcreteprototypea->clone();

if (pconcreteprototypea)

cout << "--------------" << "after delete pconcreteprototypea" << "--------------" << endl;

pprototype->operation();

if (pprototype)

輸出:

concreteprototypea copy constructor...

--------------after delete pconcreteprototypea--------------

concreteprototypea operation

請按任意鍵繼續. . .

5.擴充套件/補充

設計模式之九 原型模式 簡歷複製

原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。一般在初始化的資訊不發生變化的情況下,轉殖是最好的辦法。這既隱藏了物件建立的細節,又對效能是大大的提高。淺複製 被複製物件...

大話設計模式九 原型模式(簡歷影印)

淺複製 被複製物件的所有變數都含有與原來的物件相同的值,而所有的其它物件的引用都仍然指向原來的物件。工作經歷類 public class workexperience public void setworkdate string workdate public string getcompany p...

PHP設計模式 九 原型設計模式

在php設計模式 八 工廠模式中我們介紹了建立設計模式 creation patterns 中的工廠模式,下面我們將介紹另一種原型設計模式 prototype method 在php中,原型設計模式依靠cloning複製物件來實現。通過cloning構造的物件,將大量節省新物件的構造時間。簡單來說,...