PROTOTYPE模式难点解析

这个模式在C++中什么时候才会使用,为什么不直接new,大家只要明白一个场景,就会知道它的用处。

比如,现在让你设计一个游戏,一共有8个关卡,每关的小兵有四种,但是第一关的小兵最弱,第八关的小兵最强,你怎么设计?

你可能认为这还不简单,需要小兵的时候,直接new一个相应的小兵,就可以了。但是这样做会遇见一个问题,比如第一关的小兵和最后一关的小兵,他们的属性肯定不一样,因此,如果直接new,导致的结果就是:每次new一个实例,都要初始化一次,因为每关的小兵属性不同,因此,我们不能直接使用new,因为那样太麻烦了,容易出错,特别是当每关的小兵数量特别多的时候,因此,最好的办法,就是每关开始的时候,初始化4个小兵,当需要更多的小兵的时候,只要从4个小兵复制一个就可以。

以上就是原型模式使用的一种场景。

为了方便客户端复制操作,我们定义一个统一的接口E,这个接口E中的主要方法就是Clone(),然后令A,B,C,D都继承E,这样,客户端无论要创建哪个小兵,只需要调用那个小兵实例的Clone方法就行,但是第一个小兵肯定需要new操作,否则无法创建。

Prototype角色

E就是Prototype,它定义了统一的自我复制接口,方便客户端使用。

ConcretePrototype角色

A,B,C,D就是ConcretePrototype,它们实现了自我复制接口。

Client角色

我们的程序就是Client,简单说就是main函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟建行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值