问题背景
众所周知,一个游戏系统是通过很多子系统组成的,而且每个系统之间可能会相互关联。
例如,一个普通游戏可能需要游戏事件系统,关卡系统,角色管理系统,行动系统,成就系统。其中,行动系统可能和成就系统相关联,关卡系统和角色管理系统相关联。
将各个系统抽象为subsystem,客户端抽象为client,它们的关系是这样:
于是我们得出,这样简单的设计,客户端调用接口多,类的耦合度是非常高的。
显然需要更好的方法降低耦合度。
解决
回想生活场景,去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
相似的还有汽车系统。
同样的,我们可以将游戏中的子系统“打包”到一个或几个高级接口中,在高级接口内部处理子系统,而客户端只需要处理高级接口。这就是简单的外观模式。
外观模式
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
如何解决:客户端不与系统耦合,外观类与系统耦合。
目的:降低访问复杂系统内部子系统的复杂度,简化客户端之间的接口。
此外,外观模式还能和单例模式挂钩起来。