设计模式(三)

12.      组合模式

将对象组合成树形结构以表示‘部分-整体’的结构层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。

当需求中是体现部分与整体层次的结构时,希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑使用组合模式。如每个省都有自己的教育部门、民政部门,而该省下属的各个市也有自己的教育部门、民政部门,该市下属的各县仍然有这样几个部门,我们在编写省、市、县这样明显层级结构的以及显示各层级所包含的部门的时候,并不是下图所示:

很明显上图(且当做类图看待)中代码明显重复,是程序设计中“坏味道”的典型体现。这里我们如果应用组合模式就可以很好地解决这个问题。无论是省市县还是教育部门,民政部门,终究他们属于国家的一个部门,因此,我们可以把他们抽象为一个部门类,省市县是具有对教育部门、民政部门行使具体操作的具体层级单位,教育部门和民政部门不具有该操作或者说处于继承关系考虑其应具有该操作但是不给出具体实现。所以该图应如下:

具体的层级单位为省、市、县,他们分别具有针对教育部门和民政部门的某项操作,这样就可将教育部门类和民政部门类实现共享,大大减少了代码量。

13.      迭代器模式(Iterator)

迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式,需要对聚集有多种遍历的时候可以考虑使用迭代器模式。

14.      单例模式

单例模式保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

单例模式通过判断一个类是否为空(即这个类是否已经被实例化)和该类是否被处理(IsDisposed)来决定这个类是否需要重新生成对象。

15.      桥接模式(Bridge)

桥接模式将抽象部分与他的实现部分分离,使他们都可以独立的变化。这里实现指的是抽象类和他的派生类用来实现自己的对象。

桥接模式是合成/聚合复用原则的很好的体现,他通过将具有不断变化的类封装到一个抽象类中,利用聚合关系实现不同类之间的相互调用,降低了耦合度,同时也使得软件易于扩展和维护。

16.      命令模式

命令模式讲一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,队请求排队或记录请求日志,以及支持可撤销的操作。

命令模式也是按照低耦合的原则进行设计的,客户的需求与需求执行者之间并不是直接交流的,他与适配器模式有相似的地方,适配器模式中教练命令与外籍球员之间的交流也不是直接通讯的而是通过翻译者来进行信息传递的,教练下达命令,翻译者将该命令传递给外籍球员,客户下达命令后最终下达给的是Receiver,而客户与Receiver之间也不是进行直接通讯的,他们之间通过Invoker来讲客户命令与Receiver相联系起来。

17.      中介者模式

中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

中介者模式遵循的仍然是解耦原则,具体的Colleague之间并知道其他类的存在,但是他们都认识中介者这个类。通过在中介者这个类中设定具体的哪两个类或者哪些类之间进行交互。但是中介者模式并不是在所有情况下都适用的。中介者模式实在代码中设定由一个类对另外一个类或者对另外一些类(也就是一对一或一对多的关系)进行通讯,不能动态的指定任意两个类之间的通讯不方便进行扩展。另外,中介者模式也不能很好的解决多对多的通讯的问题。

18.      享元模式

享元模式运用共享技术有效的支持大量细粒度的对象。

享元模式可以避免大量非常相似类的开销。在程序设计中,又是需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,又是就能够大幅度的减少需要实例化的类的数量。如果能把那些参数一道类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度的减少单个实例的数目。

19.      解释器模式

解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式需要解决的问题是,如果一种特定类型的问题发生的频率足够高,那么肯呢过就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

解释器模式的原理类似密码的翻译,首先我们有一个密码本,这个密码本上指定什么样的暗文对应哪个明文。有客户端给出的一系列参数就是要解释的密码暗文,表达式类就相当于翻译员负责依次进行密码查看,TerminaExpression和NoteminalExpression类就相当于密码本,由翻译员按照密码顺序对照密码本进行逐次翻译。

20.      访问者模式(Visitor)

访问者模式表示一个作用于某对象结构中的个元素的操作。它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。

 

该模式使用的前提是Element的子类数目是固定的,通过对象结构ObjectStructure类将Element子类记录在案,Element子类通过传入的visitor参数的不同来执行相应的操作。最终通过ObjectStructure的同一函数进行调用。它适用于数据结构相对稳定的系统,把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

                                                                           

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值