设计模式大杂烩之二

来源:互联网 发布:牛大哥辅助软件 编辑:程序博客网 时间:2024/06/06 19:24

        设计模式大杂烩之一介绍了设计模式概念、模式种类和创建型模式,接下来就开始介绍结构型设计模式。

        上一章节介绍到面向对象软件的基本单元是类,面向对象程序由对象组成。在程序演变过程中,如何将新的与旧的类和对象一起完成特定的工作是设计重点考虑的问题,结构型设计模式的就是为这一问题而生,它处理类和对象的组合。根据范围目的和范围准则划分,结构型设计模式分为结构型类模式和结构型对象模式,结构型类模式使用继承机制来组合类,结构型对象模式则描述了对象的组装方式。既属于结构型类模式又属于结构型对象模式的有设配器,剩余的桥接、组合、装饰、外观、享元和代理属于结构型对象模式。

        适配器(ADAPTER)设计模式的目的是将一个类的接口转换成客户希望的另外一个接口。要设计可复用的面向对象软件是十分困难的,必须找到相关的对象,以适当的力度将它们归类,再定义类的接口和继承层次。然而抽象是随着对事物的认识不断深入而逐渐变化的,相隔一定时间同一事物的不同版本的抽象接口会出现较大的差距,在接口的具体实现还是可用的情况下,复用之前的实现可以大大减少开发和维护成本。既然要将一个类的接口转换成客户希望的另一个接口,那么新的类就是另一个接口的具体实现,这个具体实现里面包含被转换的类对应接口的调用。类适配器是使用多重继承对一个接口与另一个接口进行匹配的,其中希望得到的接口里面包含对转换接口的调用;而对象匹配器依赖于对象的组合,实际上适配器类实现的是希望得到的接口,同时适配器类里面包含对要转换接口类的引用,适配器类每个定义的实现对应转换接口类的实现。

        介绍完结构型类模式之后,接下来介绍结构型对象模式,主要有桥接、组合、装饰、外观、享元和代理。桥接设计模式的目的是将抽象部分与它的实现部分分离,使它们都可以独立地变化。通过将抽象和它的实现部分分别放在独立的类层次结构中,其中一个类层次结构针对接口,另外一个独立的类层次结构针对实现部分。接口就是可请求列表,包括成员域和成员方法,一般实现是在成员方法体里面,也就是说将成员方法内部的代码块分离到另外一个类层实现,该成员方法维持的是实现接口引用。当实现接口的类得到具体实现接口的类引用时,实现就会相应变化,类似动态改变方法内部实现。组合设计模式的目的是将对象组合成树形结构以表示“部分-整体”的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。通过在自身里面实现添加和删除自身类型的接口来维护自身类型引用数组,以此来建立父子关系。装饰设计模式的目的是动态地给一个对象添加一些额外的职责。在程序演变中,假如当前需要在之前的实现中添加额外的效果,实际上可以继承之前的类,重写要添加新效果的方法,同时在方法体里面通过调用父类方法,然后调用新效果实现方法,但是假如在添加新效果的基础上再添加新效果,那么再继续继承上一个实现的类的话,类层次不断递增。装饰设计模式采用另一种思路,装饰接口继承之前具体实现类接口,同时增加对之前具体实现类接口的引用,增加的新效果在装饰接口具体实现类里面定义,实现中包括调用之前的实现和新效果处理,这样就可以将更新具体区分开,原来基本实现在之前的实现类里面,增加的效果在装饰接口实现类中,只要是从装饰接口实现类实例化的对象都有新效果,只要是在之前实现类实例化的对象都是没有新效果的,同时同层次的装饰具体实现效果可以实现迭代,也就是说一个装饰实现类里面引用另外一个装饰类就可以实现效果叠加,效果粒度可以独立且自由组合,比继承更灵活。外观设计模式的目的是为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。通过将一个系统划分成为若干个子系统有利于降低系统的复杂性,通常是使子系统间的通信和相互依赖关系达到最小。客户类仅仅需要知道facade接口就可以了,facade实现类维护具体实现的依赖关系,达到解耦目的。享元设计模式的目的是运用共享技术有效地支持大量细粒度的对象。享元设计模式是对对象内部状态进行抽象,每一种内部状态就是一个flyweight对象,而抽象前对象之间的区别是外部状态,外部状态取决于场景,并根据场景而变化,大大减少存储开销。代理设计模式的目的是为其他对象提供一种代理以控制对这个对象的访问。常用于远程代理、虚代理、保护代理和智能指引。代理设计模式引入中间对象来提供间接性,这个中间对象与真实对象具有相同的接口,使得在使用真实对象的时候可以使用代理实例代替,代理对象里面主要对持有真实对象的引用或真实对象创建功能,在一定条件下发起对真实对象的请求调用。


~~~~~~~待续  下一章part3 行为型设计模式~~~~~~~~

0 0
原创粉丝点击