[设计模式]创建模式-原型模型(C++描述)
second60 20180427
1. 什么是原型模式
原型模式,就是通过自身复制出新的对象。是创建者中最简单的模式之一。
在C++中,是通过拷贝构造函数来实现,涉及到C++对象拷贝的浅拷贝的深拷贝的问题。
2. 原型模型结构图
模式分析:
1. 有一个抽象类,抽象类中提供clone方法
2. 子类继继抽象父类,实现clone方法
3. clone方法是通过拷贝构造函数实现
3 例子
举个游戏中非常常用的例子,游戏中有很多怪物,假如,游戏中有十种不同类型的怪,因为在整个游戏过程中,很多怪会生成,也会死亡,所以有一种比较好的方法就是,程序启运时,预先生成十种不同的怪,为一个全局怪堆,然后,需要大量生成怪时,只需从怪堆中取出相应类型的怪进行复制即可。
分析:
1. 有一个抽象怪,Monster
2. 有十种不同类型的怪继承了Monster, 分别为:MonsterA , Monsterb, MonsterC
3. 程序中批量生成怪时,只需从现有怪中复制即可,
4. 同时也可复制某个状态下的怪
代码:
// 抽象怪
class Monster
{
public:
virtual ~Monster(){}
virtual Monster* clone() const = 0;
private:
//怪属性
};
// 怪A
class MonsterA:public Monster
{
public :
Monster* clone() const
{
return new MonsterA(*this);
}
MonsterA(const MonsterA& cp)
{
//这里涉及到浅复制和深复制问题
// 浅复制为直接指向
// 深复制为先分配空制,再复制到空间
this->XXX= cp.xxx;
}
};
// 怪B
class MonsterB:public Monster
{
public :
Monster* clone() const
{
return new MonsterB(*this);
}
MonsterB(const MonsterB& cp)
{
this->XXX= cp.xxx;
}
};
int main()
{
Monster * monster = new MonsterA();
// 批量复制一千个怪A
for(int i=0;i<1000;i++)
{
Monster* monsterA = monster->clone();
}
}
4 与其他创建模式的区别
工厂模式:单个类的创建工作
抽象工厂:多个类的创建工作
单例:全局类的创建工作
建造者:复杂类的创建工作
原型模式:自身类的克隆工作
5总结
原型模型,是一种又简单,又常用的模型,用来解决自身的复制问题。到目前为止,五个创建模式都汇总了,各有各的用途,在实际运用中,要多对比,哪种创建模式才适合,设计模式虽好,但要学会正确的运用,将会像把利刃,非常有利于项目的扩展易用等。