谁是面向对象设计中的霸主?(下)

来源:互联网 发布:爱情树告白软件 编辑:程序博客网 时间:2024/05/01 23:08

         上回我们说到结构型模式组的战况,接下来我们去看看行为型模式组会有什么好戏上演。所谓行为型模式,顾名思义就是侧重于描述对象之间行为的设计模式。

         行为型模式有以下11种:

         观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

         模板方法模式:定义一个操作的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

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

         状态模式:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。

         职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

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

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

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

         策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,本模式使得算法可独立于使用它的客户而变化。

         备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

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

         行为型模式出场之后,分为了行为型模式一组和二组进行PK,因此这种类型就会有两个决赛名额,下面我们来看看PK的过程:

         观察者模式将目标和观察者分开,可以属于一个系统的不同抽象层次,目标仅知道有一系列观察者,而不知道观察者属于哪一个类;模板方法模式顾名思义就是高复用性,由一个抽象类实现模板,非常之方便;命令模式就是将调用操作的对象与知道如何实现该操作的对象解耦,分离请求者和实现者;职责链模式中多个对象可以处理一个请求,但是哪个对象能处理不知道,此时将请求发送者和具体处理者分离,并将能处理这个请求的对象连成一条链,沿链传递请求,直到被处理;状态模式就是将条件分支语句分解到各个状态子类中,这样通过定义新的子类可以很容易地增加新的状态和转换。

         最后一组的角逐即将上演:

         解释器模式在特定类型问题发生频率足够高的情况下将该问题的各个实例表述为一个简单语言中的句子,通过构建一个解释器解释这些句子来解决该问题;中介者模式在面向对象鼓励将行为分散到各个对象中,导致对象间的交互庞杂的情况下,通过定义一个中介者来负责控制和协调一组对象之间的交互,对象只认识“媒人”,减小了耦合性;访问者模式增加具体的Element是困难的,但增加依赖于复杂对象结构的构件的操作是容易的,仅需增加一个新的访问者即可在一个对象结构上定义一个新的操作;策略模式将算法封装在独立的策略Strategy类中使得你可以独立地改变算法,易于扩展;备忘录模式可以避免暴露一些只应该由对象A管理却又不得不存储在对象A之外的信息,从而对其他对象进行屏蔽,保持封装边界;迭代器模式将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器对象中,迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前元素,并且知道哪些元素已经遍历过了。

         以上四组的胜者和参加复活PK的胜者适配器模式就进入了决赛,到底哪一个设计模式能够称霸面向对象设计,我们来看决赛的战况:

         其实打到最后,筋疲力尽,横七竖八躺在地上,大家才顿悟:原来并没有什么天下最好的设计模式,如果真的有常胜无敌的设计模式,我想那应该是取日月之精华,集百家之所长,加上本身悟性极高,天赋异禀,方才能够雄霸天下!


3 0
原创粉丝点击