一种抽象对象的设计思路
这篇帖子想和大家分享一下,关于抽象对象的一种设计思路。
灵感来源
这个思路源自于我在做卡牌游戏开发的时候。当时我在设计并规范卡牌的使用方式和目标判定。
这时候遇到了一类特殊的卡牌——无需指定目标的卡牌。
按照常规思路,我为这类卡牌单独设置了一个分类,然后在各种相关判断条件里用 if else 来处理。
写着写着……关于这部分非指向性卡牌的特殊判断逻辑越来越多,代码也变得十分混乱
。
灵光一现
某一天,我在写这类卡牌释放逻辑的时候,突然想到:
这类卡牌虽然是非指向性的,但在实际操作时,它还是指向了一个看不见的区域,才能触发释放。
于是我灵机一动,直接在项目里创建了一个名为 empty 的对象
。
然后把这类的卡牌修改为:需要指向 empty 对象,而不是用代码去特殊判断它是非指向性。
这样一来,这类卡牌的各种代码逻辑,就和其它指向性卡牌完全统一了!
核心思想
这就是抽象对象的思路:
将“无目标”也抽象为一种目标对象。
衍生应用
顺着这个思路,我在设计制作敌人的攻击模式时,直接为敌人的每一种行为都开发了一张卡牌。
敌人的行为切换,直接复用已有的卡牌机制——每次使用不同的卡牌即可实现。
一点小感悟:很多时候,与其不断增加特殊判断,不如换个角度,把“特殊”抽象成“通用”的一种形式。代码会清爽很多,扩展性也会更好。





