一般来说 原型方法主要使用于快速生成和已存在对象基本一致的对象。
一般典型的例子是细胞分裂和孙悟空变换出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;
};
需要说明的是原型一般使用的是浅拷贝