行为型模式

来源:互联网 发布:同花顺软件下载官网 编辑:程序博客网 时间:2024/06/05 00:56

行为型模式

 

观察者(依赖倒转)

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

 

对象间,尤其是具体对象间,相互知道的越少越好,这样发生改变时才不至于相互影响。对观察者模式来说,目标和观察者不是紧密耦合的,它们可以属于一个系统中的不同抽象层次,目标所知道的仅仅是它有一系列的观察者,每个观察者实现Observer的简单接口,目标是不知道观察者属于哪一个具体类的。这样就可以解除对象间的紧耦合关系。

 

模板(里氏代换)

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

 

代码重复是编程中最常见、最糟糕的“坏味道”,如果我们在一个以上的地方看到相同的程序结构,那么可以肯定,设法将它们合而为一,程序会变得更好。完全相同的代码当然存在明显的重复,而微妙的重复会出现在表面不同但是本质相同的结构或处理步骤中,这使得我们一定要小心处理。

 

继承的一个非常大的好处就是你能免费地从基类获取一些东西,当你继承一个类时,派生类马上就可以获得基类中所有的功能,你还可以在它的基础上任意增加新的功能。

 

模板方法模式由一个抽象类组成,这个抽象类定义了需要覆盖的可能有不同实现的模板方法,每个从这个抽象类派生的具体类将为此模板实现新方法。这样就使得可重复的代码都提炼到抽象类中了,这就实现了代码的重用。

 

命令(单一职责)

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

 

将请求发送者与具体实现者分离,就是将调用操作的对象与知道如何实现该操作的对象解耦。命令模式可以在不同的时刻指定、排列和执行请求。可以在实施操作前将状态存储起来,以便支持取消/重做的操作,还可以记录整个操作的日志,以便以后可以在系统出问题时查找原因或恢复重做。这也意味着命令模式可以支持事物,要么所有的命令全部执行成功,要么恢复到什么也没执行的状态。总之,如果有类似的请求,利用命令模式分离请求者与实现者是最明智的选择。

 

状态

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

 

在编程中往往会遇到条件分支大量应用的问题,如果条件分支语句没有涉及重要的商务逻辑或者不会随着时间的变化而变化,也不会有任何的可扩展性,也就是说它几乎不会变化,此时条件分支是应该使用的。但是这里有很多前提,而且这些前提往往都是不成立的,事实上,不会变化的需求很少,不需要扩展的软件也很少,那么如果把这样的分支语句进行分解并封装成多个子类,利用多态来提高其可维护性、可扩展性的需要,是非常重要的。

 

状态模式提供了一个更好的办法来组织与特定状态相关的代码,决定状态转移的逻辑不在单块的ifswitch中,而是分布在各个状态子类之间,又有所有与状态相关的代码都存在于某个状态子类中,所以通过定义新的子类可以很容易地增加新的状态和转换。

 

职责链

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

 

同样是将请求发送者与具体实现者分离。我们时常会碰到这样的情况:有多个对象可以处理一个请求,但是哪个对象处理该请求事先并不知道,要在运行时刻自动确定,此时,最好的办法就是让请求发送者与具体处理这分离,让客户在不明确指定接收者的情况下提交一个请求,然后由所有能处理这一请求的对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。

原创粉丝点击