一般來說 原型方法主要使用于快速生成和已存在對象基本一致的對象。
一般典型的例子是細胞分裂和孫悟空變換出N的小猴子
不過我這里舉一個在GUI設計過程的例子
假如一個面板上的同質按鈕,他們僅文本不同,代表的邏輯不同,其他信息是完全一致的,比如皮膚,邊框,大小等
按照一般方法可能會這樣構造面板
Button* btn1 = new Button();
btn1->SetSize(..);
btn1->SetBorder(..);
btn1->SetListener(..);
btn1->SetVisible(true);
btn1->SetParent(panel);
btn1->SetColor(
)
Button* btn2 =..
當然還有其他按鈕:)
是不是很煩?
借助原型模式
可以大大的簡化!
比如:
Button *btn1 = new Button(panel);
Button *btn2= btn1->Clone();
Button *btn3= btn1->Clone();
Button *btn4= btn1->Clone();
然后只要設置各個按鈕對應的文本即可
為了使用原型方法我們需要做的僅僅是
給對象增加Clone接口和其實現即可
比如:
class AbstractWidget
{
public:
virtual AbstractWidget* Clone() = 0;

};
需要說明的是原型一般使用的是淺拷貝