dp書上的定義為:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作的時候,我們需要準備簡歷。假設沒有列印裝置,因此需手寫簡歷,這些簡歷的內容都是一樣的。這樣有個缺陷,如果要修改簡歷中的某項,那麼所有已寫好的簡歷都要修改,工作量很大。隨著科技的進步,出現了列印裝置。我們只需手寫乙份,然後利用列印裝置影印多份即可。如果要修改簡歷中的某項,那麼修改原始的版本就可以了,然後再影印。原始的那份手寫稿相當於是乙個原型,有了它,就可以通過影印(拷貝)創造出更多的新簡歷。這就是原型模式的基本思想。下面給出原型模式的uml圖,以剛才那個例子為例項。
原型模式實現的關鍵就是實現clone函式,對於c++來說,其實就是拷貝建構函式,需實現深拷貝,下面給出一種實現。
[cpp]
view plain
copy
//父類
class
resume
virtual
~resume() {}
virtual
resume* clone()
virtual
void
set(
char
*n) {}
virtual
void
show() {}
};
[cpp]
view plain
copy
class
resumea :
public
resume
; resumea::resumea(const
char
*str)
else
} resumea::~resumea()
resumea::resumea(const
resumea &r)
resumea* resumea::clone()
void
resumea::show()
這裡只給出了resumea的實現,resumeb的實現類似。使用的方式如下:
[cpp]
view plain
copy
intmain()
最近有個招聘會,可以帶上簡歷去應聘了。但是,其中有一家公司不接受簡歷,而是給應聘者發了一張簡歷表,上面有基本資訊、教育背景、工作經歷等欄,讓應聘者按照要求填寫完整。每個人拿到這份**後,就開始填寫。如果用程式實現這個過程,該如何做呢?一種方案就是用模板方法模式:定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。我們的例子中,操作就是填寫簡歷這一過程,我們可以在父類中定義操作的演算法骨架,而具體的實現由子類完成。下面給出它的uml圖。
其中fillresume() 定義了操作的骨架,依次呼叫子類實現的函式。相當於每個人填寫簡歷的實際過程。接著給出相應的c++**。
[cpp]
view plain
copy
//簡歷
class
resume
virtual
void
seteducation() {}
virtual
void
setworkexp() {}
public
: void
fillresume()
};
class
resumea:
public
resume
; class
resumeb:
public
resume
; 使用方式如下:
[cpp]
view plain
copy
intmain()
設計模式 原型 模板方法模式
定義 原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式其實就是從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。以簡歷 resume 影印為例。程式 如下 using system using system.collection...
大話模式之原型模式 模板模式
簡歷class resume icloneable public void setpersonalinfo string string age public void setworkexperience string timearea,string company public void displ...
建立型模式 原型模式
使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...