8.Bridge桥接模式面向对象复用举例来说假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都是同样的类型,面临同样的功能需求变化,比如坦克可能有多种不同的型号:T50,T75,T90对于其中的坦克设计,我们可能很容易设计出来一个Tank的抽象基类,然后各种不同型号的Tank继承自该类。public abstract class Tank{ abstract Shot(); abstract Run(); abstract Trun();}public class T50:Tank{}public class T75:Tank{}public class T90:Tank{} 另外的变化原因但是PC和手机上的图形绘制,声效,操作等完全不同。。。因此对于各种型号的坦克,都要提供各种不同平台上的坦克实现://PC平台实现public class PCT50:T50..public class PCT75:T75..//手机平台实现public class MobileT50:T50...public class MobileT75:T75...这样的设计会带来很多问题:有很多重复代码,类的结构过于复杂难以维护,最致命的是引入任何新平台,比如在TV上的Tank游戏,都会让整个类层次结构复杂化。平台和型号 两个变化Motivation思考上述问题的症结:事实上由于Tank类型的固有逻辑,使得Tank类型具有两个变化的维度---一个变化的维度为"平台的变化",一个变化的维度为型号的变化如果应对这种 多维度的变化?如果利用面向对象技术来使得Tank类型可以轻松地沿着 平台 和型号 两个方向变化,而不引入额外的复杂度?Intent将抽象部分与实现部分分离,使它们可以独立变化将一个事物中多个维度的变化分离。用子类化表示变化。Bridge模式的几个要点:。Bridge模式使用 对象间的组合关系 解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化(一个事物中多个维度的变化)。所谓抽象和实现沿着各自维度的变化,即 子类化 它们,比如不同的Tank型号子类,和不同平台子类)。得即到各个子类后,便可以任意组合它们,从而获得不同平台上的不同信型号。。Bridge模式有时候类似于多继承方案,但是多继承往往违反单一职责(即一个类类只有一个变化的原因)。Bridge模式的应用一般在 两个非常强的变化维度,有时候有两个变化维度,但是某个方向的变化并不剧烈--换言之两个不会导致纵横交错的结果,并不一定要使用Bridge模式。软件无对错,只有需求满足不。上帝设计的时间轴。时间轴就是变化。。。。9.Composite组合模式对象容器的问题在面向对象系统中,我们常会遇到一类具有容器特征的对象---即它们在充当对象的同时,又是其他对象的容器。public class SingleBox:IBox{ public void process(){}}public class ContainerBox:IBox{ public void process(){} public ArrayList getBoxes(){}}如果我们要对这样的对象容器进行处理:IBox box = Factory.getBox();if(box is ContainerBox){ box.process(); ArrayList list = (ContainerBox)box.getBoxes(); 将面临比较复杂的递归处理}else if(box is SingleBox){ box.process();} 客户代码:使用此类的代码,就是客户代码。客户代码和类发生关系,最好是依赖抽象。接口最小化原则。接口隔离:定制服务,使用多个接口总比使用单一接口好。Motivation上述描述的问题根源在于:客户代码过多地依赖于对象容器复杂的内部实现结构对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来代码的维护性,扩展性等弊端。如果将 客户代码与复杂对象容器结构 解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?Intent将对象组合成树性结构以表示 部分-整体 的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。解决依赖关系,变化关系。Composite模式的几个要点。Composite模式采用树形结构来实现普遍存在的对象容器,从而将 一对多的关系转换为 一对一 的关系,使得客户代码可以医治地处理对象和对象容器,无需关系处理的是单个对象,还是组合对象容器。。将 客户代码与复杂对象容器结构 解耦是Composite模式的核心思想,解耦之后,客户代码将与纯粹的抽象接口--而非对象容器的内部实现解耦--发生依赖关系,从而更能应对变化。
设计模式纵谈--bridge and composite
最新推荐文章于 2012-06-07 19:24:00 发布