原型模式正是提供了自我複製的功能,就是說新物件的建立可以通過已有物件進行建立。《設計模式:可復用物件導向軟體的基礎》中是這樣說的:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。這這個定義中,最重要的乙個詞是「拷貝」,也就是口頭上的複製,而這個拷貝,也就是原型模式的精髓所在。
【注】深拷貝和淺拷貝的區別:
選擇原型模式最好遵循以下原則:
當我們的物件型別不是開始就能確定的,而這個型別是在執行期確定的話,那麼我們通過這個型別的物件轉殖出乙個新的物件比較容易一些;
有的時候,我們需要乙個物件在某個狀態下的副本,此時,我們使用原型模式是最好的選擇;例如:乙個物件,經過一段處理之後,其內部的狀態發生了變化;這個時候,我們需要乙個這個狀態的副本,如果直接new乙個新的物件的話,但是它的狀態是不對的,此時,可以使用原型模式,將原來的物件拷貝乙個出來,這個物件就和之前的物件是完全一致的了;
當我們處理一些比較簡單的物件時,並且物件之間的區別很小,可能就幾個屬性不同而已,那麼就可以使用原型模式來完成,省去了建立物件時的麻煩了;
有的時候,建立物件時,建構函式的引數很多,而自己又不完全的知道每個引數的意義,就可以使用原型模式來建立乙個新的物件,不必去理會建立的過程;
即是說,基本就是你需要從a的例項得到乙份與a內容相同,但是又互不干擾的例項的話,就需要使用原型模式!
1.使用拷貝模式比直接new乙個物件的開銷要小的多;
2.可以在程式執行時(物件屬性發生了變化),得到乙份內容相同的例項,但之間還不會相互干擾;
示例:
#include "stdafx.h"
#include #include using namespace std;
class product
void setprize(int prize)
void setsize(int size)
void setshape(char* shape)
void display()
product* clone()
};int main(int argc, char *ar**)
結果:
原型模式及c++實現
設計模式之原型模式(c++)
C 設計模式 原型模式
定義 用原型 prototype 例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。結構 理解 1.prototype 是原型基類,提供clone 純虛方法,它根據不同的派生類來轉殖不同的物件。2.concreteprototype 是原型具體類。實現clone 方法,轉殖自己,返回轉殖後的...
c 設計模式(原型模式)
good 從乙個物件再建立另外乙個可定製的物件,而無需知道任何建立的細節。並能提高建立的效能。說白了就copy技術,把乙個物件完整的copy出乙份。例 include include include using namespace std class prototype 抽象基類 prototype...
C 設計模式 原型模式
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。建立型模式中乙個比較特殊的模式 原型模式,有個最大的特點是轉殖乙個現有的物件,這個轉殖的結果有2種,一種是淺度複製,另一種是深度複製。建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速...