有些模式的实现代码并不好。不是说某个模式放在游戏中是否合适,而是实现设计模式的代码本身就存在问题。其中 最明显的就是观察者模式,Observer具体类中竟然定义了对其他游戏系统甚至是对Subject实...
有些模式的实现代码并不好。不是说某个模式放在游戏中是否合适,而是实现设计模式的代码本身就存在问题。其中 最明显的就是观察者模式,Observer具体类中竟然定义了对其他游戏系统甚至是对Subject实例的引用字段!你Observer里面定了对其他系统实例的引用,那请问中介者模式情何以堪?虽然对内存不存在明显浪费(只在堆中实例对象的内存增加了8字节指针),但是逻辑上并不那么合适,所以这里更好的处理方式我认为是使用之前定义的中介者GameFacade实例。
另外,Observer中定义了对Subject实例的引用只是为了获取Subject实例的值,我觉得这实在不合适。更好的方式我认为是通过对Observer类中Update函数传值的方式传送数据。
最后一点,比起把Observer定义成abstract class,我认为interface是更好的选择。这样可以让需要监听事件的类实现这个接口,这样做可以免去在类中增加Observer实例。
像siki目前这个观察者模式的实现代码,非常不利于阅读和之后的维护。