一、命令模式
定义:
命令将一个请求封装为一个对象,从而使得可以使用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及可撤销的操作。
适用情况:
1、抽象出待执行的动作以参数化某对象,此模式是过程语言中的回调机制的一个面向对象的替代方法;
2、在不同的时刻指定、排列和执行请求;
3、支持取消操作;
4、支持修改日志,这样当系统崩溃时,这些修改可以重新被做一遍;
5、用构建在原语操作上的高层操作构造一个系统;
二、责任链模式
定义:
责任链是多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。讲这些对象连成一条链,并沿着这条链传递改请求,知道有一个对象处理它为止。
适用情况:
1、有多个的对象可以处理一个请求,哪个对象处理该请求在运行时刻自动确定;
2、在不明确指定接受者的情况下,向多个对象中的一个提交一个请求;
3、可处理一个请求的对象集合应被动态指定;
三、观察者模式
观察者模式定义对象间的一种一对多的以来关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知,并自动更新。
适用情况:
1、当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立地对象中以使他们可以各自独立地改变和复用;
2、当对一个对象的改变同时需要改变其他对象,而不知道具体有多少个对象待改变时;
3、当一个对象必须通知其他对象,他又不能假定其他对象是谁,即:不希望这些对象是紧耦合;
四、策略模式
策略定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换。此模式使得算法可以独立于使用他们的客户而变化。
适用情况:
1、许多相关的类仅仅是行为有异,策略提供了一种用多个行为中的一个行为来配置一个类的方法;
2、需要使用一个算法的不同变体。例如,定义一些反应不同空间的空间/时间权衡的算法,当这些变体实现为一个算法的类层次时,可以使用策略模式;
3、算法使用客户不应该知道的数据。可以使用策略模式以避免暴露复杂的、与算法相关的数据结构;
4、一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,将相关的条件分支移入他们各自的Strategy类中