常见的几种设计模式

1. 命令(Command)

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

①抽象出待执行的动作以参数化某对象,此模式是过程语言中的回调(callback)机制的一个面向对象的替代方式;
②在不同的时刻指定、排列和执行请求;
③支持取消操作;
④支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍; ⑤用构建在原语操作上的高层操作构造一个系统。

责任链(Chain of Responsibility)

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式适用于以下几种情况: ①有多个的对象可以处理一个请求,哪个对象处理该请求在运行时刻自动确定; ②在不明确指定接收者的情况下,向多个对象中的一个提交一个请求; ③可处理一个请求的对象集合应被动态指定。

观察者(Observer)模式

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

观察者适用于以下几种情况:

①当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立地对象中以使它们可以各自独立地改变和复用;
②当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;
③当一个对象必须通知其他对象,它又不能假定其他对象是谁,即:不希望这些对象是紧耦合的。

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

策略模式适用于以下几种情况:

①许多相关的类仅仅是行为有异。

“策略”提供了一种用多个行为中的一个行为来配置一个类的方法;

②需要使用一个算法的不同变体。例如,定义一些反应不同空间的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式;
③算法使用客户不座该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构;
④一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,将相关的条件分支移入它们各自的Strategy类中,以代替这些条件语旬。
posted @ 2022-05-26 19:59  wjxuriel  阅读(41)  评论(0)    收藏  举报