解耦性模式-服务定位器

通过阅读《游戏编程模式》在我的理解下,服务定位器就是:++将需要全局使用的对象进行统一的管理++。

主要是为了解决单例对象在众多系统中被使用暴露了真实系统实现的问题,通过在单例系统外围包裹一层,然后通过访问外界的定位器来范围真实的服务对象。

当然这样就意味着,我们需要在定位器中对服务进行初始化管理。

Ps:使用这样的方式,我们就可以通过定位器快捷的替换服务器的具体实现对象,以指定使用例如测试音频模块、发布音频模块等的发布环境区分的子服务类型。{.red}

Tips: 其实对于上述的环境区分,我们也可以通过宏定义来处理。

时序耦合

在书中提到了一个++时序耦合++的概念,所谓时序耦合就是指两个或多个独立系统因为依赖关系导致,必须有A才能使用B的情况出现,解决时序耦合可以让我们真正让每个系统独立。

为了防止出现NULL的情况,我们可以为服务指定一个默认初始化方式或默认初始化对象,同时我们可以在想要禁用该项服务时,返回这个默认的空对象。

说明

服务定位器模式在很多方面和单例模式(第6章)非常相近,所以值得考虑两者来决定哪一个更适合你的需求。

  • Unity[插图]框架把这个模式和组件模式(第14章)结合起来,并使用在了GetComponent()方法中。

  • Microsoft的XNA[插图]游戏开发框架将这个模式内嵌到它的核心Game类中。每个实例有一个GameServices对象,能够用来注册和定位任何类型的服务。