什么是原型模式?
原型模式⼀种创建型设计模式,该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。在原型模式中,通常有⼀个原型对象,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来创建,⽽⽆需知道具体的创建细节。
Prototype模式说简单点,就是提供了一个clone, 通过已存在对象进行新对象创建。clone()实现和具体的实现语言相关,在C++中我们通过拷贝构造函数实现。
那为啥要写clone的接口来实现这个目的呢?直接使用拷贝构造不香么,知乎中看到陈硕大佬对此的一个回答,觉得豁然开朗。
Prototype 的意义在于,你拿到一个 基类指针 Base* ,
它指向某个 派生类 Derived 对象,
你想克隆出 Derived对象,但代码中不写出 Derived 的具体类型,
因为有很多派生类,这种情况下你用构造函数是搞不定的。
switch-case 是 bad smells 。
另外,这里考虑 virtual 的性能损失是主次不分,
构造对象需要分配内存,这开销比一次虚函数调用大多了。
–陈硕在知乎中的回答
复习拷贝构造函数实现
在学习原型模式之前,我们先来看一下C++中深拷贝和先拷贝问题