Liny_@NotePad

沉迷ACG中

【20091009】C++培训日记-UML

话说两个半月前还是比较清楚的(为了软考) 现在已经忘光光了 囧rz。

于是再复习一下依赖 关联 组合 聚合:

  • 依赖指临时关系,一般出现在方法的带入参数或方法的局部变量。比如角色类和作为攻击对象带入到attack方法的怪物类之间就是依赖关系。
  • 关联是固定关系,一般出现在类的成员变量。比如角色类和武器类(通常角色都会持有一个武器吧 - -)。
  • 聚合是特殊的关联(较弱),生命周期不一定相同。比如玩家和角色(最近的网游都会有 登陆进去之后一个账号可以创建多个角色)。
  • 组合是特殊的关联(较强),生命周期一致。比如玩家和仓库(在有的游戏中,一个账号可以创建多个角色,但是共用一个仓库)。

继续记录小笔记:

  • 用例图中,表示为Actor,则说明不属于系统范围,譬如一个ATM系统的用例图中,“银行后台系统”可以作为一个Actor。
  • 协作图:据说在ROSE中,绘制好时序图(序列图)后可以按F5可以转化 - -

继续看视频ing...

【20090929】C++培训日记-设计模式(结构型)与(行为型)

只节选了几个讲。。结果老师讲太快 把明天的内容也讲了 囧 于是明天改成Lua 也。。。

结构型的例子是以下:

  • 适配器(Adapter):某游戏开发团队设计游戏的时候物理模块没有时间设计,于是向外面的公司购买了一个物理模块,但是两个接口不合 于是这里就用到了适配器。
    扩充一下,类适配器和对象适配器:
    • 类适配器:使用继承实现(在Java里没有多继承,囧,都没有细考量过),在使用时直接使用适配器类即可。
    • 对象适配器:优先使用组合而并非继承,耦合度低,而且即使传入子类对象也可以适配,在使用时需要一个适配器类和一个被适配的对象。
       
  • 装饰者(Decorator):有些物体并不适用于普通的物理引擎。比如默认物体遇到墙会反弹,而子弹则应该会自由落体(?),幽灵则会穿透。不改变接口而增加新职责 即装饰者模式了。。
     
  • 门面(外观/Facade):游戏中有许多模块:聊天、交易、任务、角色信息、宠物……UI程序员需要了解所有模块的接口,接口管理不易,且违背了迪米特法则,因此将UI用到的接口都放到一个类中,方便UI程序员调用。
     
  • 代理(Proxy):游戏玩家越来越多,原本放在游戏服务器上的数据库需要独立一台服务器,如果修改原来的数据库相关操作需要大量修改(?不是只改一下url么???),此时使用Proxy模式,游戏调用Proxy类,不关心Proxy是如何实现访问数据库的,而在Proxy里面具体实现。

行为型模式例子:

  • 责任链(Chain of Responsibility):策划提出进入某一个岛需要判断是否持有某物品、是否有特殊技能、角色等级、生命值……而这些条件是不一定的,需求可能随时变动。责任链模式很动态 = =
    顺便说一下纯的责任链模式和不纯的责任链模式:
    • 纯的责任链模式:对于一个链结点,要吗承担责任,要吗传递到下一个链,这个应用貌似很少见。
    • 不纯的责任链模式:一个链结点可以承担部分责任,比如本例中每个判定都可以在为假的时候丢回去(履行了一部分职责),真的时候才继续往下传。
       
  • 观察者(Observer):许多装备会有特殊效果,比如攻击时有一定几率加成、被攻击时一定几率miss、每次攻击必多伤害一定血值等。这是一对多的关系(如果是一对一 我们可以用策略模式),因此我们将这些事件(攻击、被攻击等)分别设计为主题类,在装备上特殊装备时特殊效果注册对应的主题,于是事件触发时会通知各个特效执行,在装备卸下时就可以注销主题了。
     
  • 策略(Strategy):怪物们都有自己的AI,而且即使同一类的怪物拥有的AI都可能不一样,我们将AI设计成一组策略类,让怪物类组合一个AI对象,需要切换的时候重新设置AI对象即可。

总觉得有些例子还是很牵强。。。 = =||

【20090928】C++培训日记-设计模式(创建型)

昨天闹钟坏了 晚上一直调调好了 结果忘了调回来 第二天就迟到了 囧

正好三个工厂(简单工厂、工厂方法、抽象工厂)和单例没有听,只听了一个Builder。

老师举的例子是这样的:

  • 简单工厂:游戏中需要很多怪物,为了方便管理……
     
  • 工厂方法(Factory Method):将怪物分类(?)
     
  • 抽象工厂(Abstract Factory):貌似是将什么按季节分了?怪物还是地图?
     
  • 单例(Singleton):不知道 = =
     
  • 建造者(Builder):要创建一组怪物,里面有m个A怪,n个B怪,同时绑定了α触发器,步骤繁琐很容易出错,因此使用Builder。。

总觉得很迷糊 Orz。。。因为没听。。上课视频看不了,ppt也不能传。。

糖果机的状态转换。。

一台糖果机,支持n种操作,譬如:投入硬币、退还硬币、转动曲柄、填充糖果……
而不同状态下不同操作返回的内容不一样。下面是它的状态转换图:

如何实现它的转换呢?

存档读档的Memento——备忘录模式

在玩游戏的时候我们总要存档、读档,
怎样实现这个功能呢?

买衣服计价问题——策略模式与OCP原则

假设某服装店正在进行促销活动。
T恤打八折,毛衣打五折,而衬衫价格不变,
怎样获得要购买的衣服的实际出售价格?

几个UML模型的Java实现..(2)

这个图中有组合与聚合两种关系。

几个UML模型的Java实现..(1)

图中所示的分别是关联、组合、聚合……