设计模式之原型模式
作者:互联网
原型模式也属于创建型模式,用于创建重复的对象,它提供了一种创建相同对象的最佳方式。当直接创建对象需要较大的代价时,可以使用原型模式。例如对象需要读取文件或者向服务器发起请求获取某些必要数据才可以被创建,每次都直接创建显然有很大代价,所以可以考虑缓存数据,提供一个克隆接口,直接用缓存的数据创建对象。
原型模式的实现较为简单,基类提供Clone虚函数,子类只需实现这个Clone函数即可。
原型模式还有个重要意义:当一个基类指针指向某个子类对象时,这时如果想要拷贝这个子类对象是比较困难的,因为只通过一个基类指针我们不知道该指针究竟指向了什么类型的对象,即无法调用相应的构造函数,通过typeid加switch貌似代价太大,所以可以使用此原型模式。#include <iostream>
struct Animal {
virtual ~Animal() {}
virtual Animal* Clone() = 0;
virtual void ShowName() = 0;
};
struct Tiger : public Animal {
Animal* Clone() override { return new Tiger(); }
void ShowName() override { std::cout << "Tiger" << std::endl; }
};
int main() {
Animal* animal = new Tiger();
animal->ShowName();
Animal* animal_copy = animal->Clone(); // 想要一个和animal完全相同的实例
animal_copy->ShowName();
return 0;
}
标签:animal,Clone,模式,原型,Animal,设计模式,ShowName 来源: https://blog.51cto.com/15075520/2606219