[设计模式]创建模式-原型模型(C++描述)

[设计模式]创建模式-原型模型(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总结

原型模型,是一种又简单,又常用的模型,用来解决自身的复制问题。到目前为止,五个创建模式都汇总了,各有各的用途,在实际运用中,要多对比,哪种创建模式才适合,设计模式虽好,但要学会正确的运用,将会像把利刃,非常有利于项目的扩展易用等。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值