o(︶︿︶)o 唉,今天的状态不是很好,但是学习还是要继续的,今天和大家一起分享一下建造者模式,记得之前自己之前一直再想QQ秀换装是怎么是怎么是实现的,今天看了建造者模式我明白了...
Darren又在每天的这个时候与大家见面了........
伴随着家驹的《不在犹豫》今天的学习就这样展开了:
首先回忆一下之前我已经学习的设计模式和原则:
简单工厂模式,策略模式,单一职责原则,开放封闭原则,依赖倒转原则,装饰模式,代理模式,抽象工厂模式,原型模式,模板方法模式,迪米特法则,外观模式
总结一下目前我已经学习了8个设计模式和4个设计原则
今天就再学习一下建造者模式
先分析一下我们现在的需求:
每当我们创建游戏用户成功的时候,第一次登录以后系统都会提示我们选择我们喜欢的人物,对于大部分网游基本上都是这种模式,像诛仙,天龙八部,问道。还有一些是玩家进入游戏以后才开始选角色,例如反恐精英ONLINE。不用的游戏都会让玩家根据自己的意愿去选择自己喜欢的人物,今天我们就来小小剖析一下这里面的原理:
代码今天由于时间关系就不提供源码了,只要原理讲清楚了,我想编码应该不是什么问题。
我对反恐精英ONLINE比较熟悉,其实这个游戏和早期的CS很像,大家应该都不会陌生:
当我们开始一轮战斗,在开始的时候系统会提示我们要选择的角色,下面是反恐精英里面的部分角色以及介绍:
这几个角色都是前年反恐里面比较流行的几个角色,不从性别方面我们可以初步了解这几款角色具有的共同特点就是他们都是人,都有头,手,脚,身子,当然武器配备如果从编程的角度去考虑的话应该另外抽出一个类单独去写,这一块就不在多讲了:
游戏里面最重要的就是游戏角色和技能,角色看上去好了,技能炫了,武器装吧好了,大家都喜欢玩,想当年反恐里面出现一个“伊琳娜”让多少男玩家倾心,尤其是掌握这个角色的也是一个女玩家,大家想想轰动可想而知,谁让这个社会就是一个狼的社会呢:
一款游戏里面必须要有很多角色,这样才能吸引住玩家。
我们先来讲一下建造者模式的定义以及应用场合:
定义:
将一个复杂对象和它的表示分离,使用同样的构造过程可以创建不同的表示。
建造者模式的好处:
建造者模式的好处就是建造代码和表示代码分离,由于简直者隐藏了该对象是如何组装的,所以如果想改变一个产品的内部表示,只需要再定义一个建造者就可以了。
应用场合:
创造者模式是在当创建复杂的对象的算法应该独立于该对象的组成部分及它们的装配方式时适用的模式。
介绍完建造者的具体定义以及应用场合,大家应该对这个模式有了一定的了解,那么现在大家一起来吧游戏角色创建一起理一下
1,首先我们应该建立一个GameRole角色类,里面封装游戏角色的相关属性以及动作。这里简单的定义几个动作:走,猫步走,跑,开枪,扔手雷.. ...
2,定义抽象角色类AbstractRole,里面封装具体的创建各个角色的方法,比如创建头型,发型,眼型,眉形,嘴型,身体,衣服,裤子,鞋子 ... ...里面考虑的比较多,就不一一列举了。
3,定义具体的角色类,比如说"安娜"Ana类,这个类继承自AbstractRole,在这个类里面根据我们的意愿去构建我们想要的角色的头型,发型,衣服,裤子,身体,鞋子。
4,定义角色创建控制类RoleDirector。这个类里面大致是这样写的:
Class RoleDirector
{
private AbstractRole absRole;
public RoleDirector(AbstractRole nowRole)
{
this.absRole = nowRole;
}
public void CreatRole()
{
absRole.创建头型();
absRole.创建身体();
.... ....
}
}
在客户端调用的时候就直接:
.... ........ ....... .......
Ana ana = new Ana();
RoleDirector roleDirector = new RoleDirector(ana);
roleDirector.CreatRole();
.................
......
如果客户端需要调用角色的相关方法,例如,跑,跳,扔雷等操作的时候,只需在AbstractRole里面添加一个抽象的方法,让他来返回一个GameRole就可以啦,这样你就可以在客户端调用角色的相关动作。
到此为止,整个角色的创建思路分析完毕。时间也花了不少。,如果主管要求我们再添加几个新的游戏角色的话:
没问题,我们只需要添加这几个角色的类,然后继承于AbstractRole并实现里面的方法就好了。是不是扩展性很强呢。其实在创建模式是对依赖倒转原则的实际用用,依赖于抽象,不依赖与具体。
今天到此为止,欢迎大家一起加入讨论。
www.tianboo.net