外观模式
外观模式是一个很简单,很常用的一种模式。
它其实就是一个高级接口,包含了许多子系统的初始化以及功能,它与用户直接交互,用户不再与众多子系统具有很高的耦合度,用户不必知道子系统的初始化以及调用的过程,只要在接口处调用函数即可。
就像是汽车,它的内部有燃油系统,动力系统,方向系统,音乐等众多系统,司机并不需要知道这些系统的具体工作原理,他只需控制方向盘,挡位,观察仪表盘,就能控制汽车,获取汽车的状态。
在上一篇状态模式中的GameState类,若我们在此类中初始化、调用和释放游戏子系统,首先我们破坏了类的单一职责原则,该类的功能就是战斗状态的切换,加了其它功能,会使得这个类变得臃肿,难以维护,也降低了可重用性。
public class GameScene{
...
private HeroSystem = null;
private EnemySyatem = null;
private BattleSystem = null;
private MoneySystem = null;
...
void Init(){
HeroSystem = new HeroSystem();
EnemySystem = new EnemySystem();
...
HeroSystem.Init();
EnemySystem.Init();
}
void Update(){
HeroSystem.Update();
EnemySystem.Update();
...
}
void Release(){
HeroSystem.release();
EnemySystem.release();
...
}
...
}
很显然,外观模式可以让用户体验更好,提供接口与界面给用户,实现了高内聚,低耦合的原则,同时也符合开闭原则,我们只需在高级接口类中增加代码即可。另外,还提高了代码的安全性,状态类的初始化失败可能会导致游戏系统宕机或初始化失败。
当然,外观模式也有自己的缺点,过多的功能放置于同一个接口中,会使类过于臃肿,代码庞大难以维护,我们可以采用重构接口类的方法,将相似功能分类,提高类的重用性。