对于设计模式,有太多过来人的忠告!“不能拿着捶子,到处都是钉子”,“不能为模式而模式”,“更加的不能错用模式”,“模式是处理变化的”等等。这些忠告会让初学者不知所措,就好比太多的选择是种负担!我想我还是简单的理解:设计模式是一种思想,不是技术,它指导的是设计。我想只要我们从设计的问题去运用它就够了!不管这种理解正不正确,当你涉入进去会让你从更宽泛的角度去再次的思考。
《设计模式》言简意赅,是本很好的参考书,值得反复咀嚼与推敲!我没读过《设计模式精解》,听说是本很好的设计模式入门教材,同类的很多,但在GOF书的面前都成了“伪经”。我没有贬低的意思,它们的价值也是很大的,辅以实例有助于理解和运用。
这次翻开《设计模式》,第一个让我感兴趣的是Facade模式!因为在设计多层应用系统时,各层之间的合作关系是比较复杂的,Facade模式就是帮助减弱各层之间耦合度的解决方案。因为它能为子系统中的一组接口提供一致的界面(更高层的接口),这个接口使得子系统更加容易使用。这个模式理解起来非常的简单,现实生活也有太多的例子,像各企事业单位都有信仿办公室,它给外部提供一个简单高效的窗口!你可能会想:我们可以越过它吗?现实生活中可以走后门儿,那Facade模式是不是也是这样呢?没错,Facade对外没有隐藏子系统提供的接口,外部对象可以越过它而直调用子系统提供的接口。那你可能会问:这还有什么意义呢?因为Facade模式提供易用性的同时没有限制通用性,当然这种情况你得权衡!应该提供尽量多的高层接口供客户使用。这样可以保证对外隐藏的子系统实现的变化更加容易!Delphi的VCL也有例子,在RemoteDataModule中我们就可以定义一些接口,供客户系统调用!它是个结构型模式,在框架中处理各层之间的关系时应该是个常用的模式。
我不想为这个模式写个实例了,它的目的就是降低接口复杂度!我正准备为Delphi三层系统的开发设计一个参照框架(为什么是参照呢?因为我还做不到通用),里面将有Facade模式的身影!
除了在设计开始时有考虑解决方案,可更多的时候我们不能应对所有未来出现的情况,更何况对于没有经验的设计人员。找到设计模式为我们提供的解决方案后,下一步是代码实现的问题!将现有代码根据模式等改造成好的设计需要方法,这就是重构!它是一门技术,现在的IDE大多有提供,设计模式为重构提供了目标(引自GOF)。我们也应该学习它!