设计模式笔记之 - Abstract Server & Adapter & Bridge

       先看示例,开关控制灯,其中可以使用TurnOnTurnOff,先按照最直接最简单的方法来做,可能得到如下的形式:

很容易发觉,此设计虽然简单,但是它却违反了DIPOCP,因为Switch依赖了具体的类LightDIP告诉我们要优先依赖于抽象类。而如果我们需要扩展此设计,使用Switch管理除Light外其他的类将是比较麻烦的事情。

引入Abstract Server模式,此模式很简单,只需要抽象出接口即可,如下图,可以很容易的使之满足DIPOCP

       需要说明的是接口属于谁,DIP(依赖倒置原则)则给我们指明了方向,接口应该使用者说了算,这里就是应该Switch持有接口,而不是Light。如果要是其他类能被Switch控制,那么只需要继承自Switchable接口即可。

       分析上面的模式,可以发现LightSwitch绑定在一起,要是Light不能改变就麻烦了,这里我们可以引入另外一个模式:Adapter

       可以看到在LightSwitchable之间加多了个适配器来隔离这些问题,Light可以有自己的方法,对应关系完全可以交给LightAdapter来处理,只是要加多一个类了,加了这么多其实都是在需要的时候才加,对大多数情况来说AbstractServer就合适了。

       Bridge模式,在类型层次具有多个自由度的情况中,Bridge模式通常是有用的,我们可以把这些层次结构分开并通过桥把它们结合到一起,而不是把它们合并起来。

       模式既可以带来好处也可以带来坏处,它的坏处就是不必要的复杂性,它应该使用在那些最需要最合适的地方。

 

posted on 2005-09-21 12:56  dragonpro  阅读(674)  评论(0编辑  收藏  举报

Free Web Counter