行为型模式(一)

前言

  我们已经学习了设计模式的创建型模式和结构型模式,今天我们一起来学习一下行为型模式。

内容

 策略模式

  定义了算法家族,分别封装起来,让他们之间可以互相转换,此模式让算法的变化,不会影响到使用算法的客户。

  实例:商场促销
  这里写图片描述
  优点:开放封闭的原则,不修改原有系统,灵活增加;减少各种算法类与使用算法类之间的耦合;简化单元测试;封装变化;

  缺点:本身并没有解除客户端需要判断的压力,可与简单工厂模式结合使用;客户端需要知道所有的策略类;无法同时使用多个策略类;造成系统产生多个策略类;

  适用场景:需要在不同时间应用不同的业务规则;

 观察者模式

  定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

  实例:监视老板
  这里写图片描述
  优点:接触耦合,依赖抽象不依赖具体,使得各自的变化都不会影响到另一边的变化;开放封闭的原则,增加新的具体观察者无需更改代码;

  缺点:通知所有观察者会花费较多时间;抽象通知者依赖抽象观察者,如果没有接口,功能就无法完成;

  适用场景:当一个对象改变需要同时改变其他对象且不知道具体有多少对象需要改变的时候;

 访问者模式

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

  实例:男人和女人
  这里写图片描述
  优点:容易增加新的操作,将有关的行为集中到一个访问者对象中;不修改现有元素类层次的情况下,定义作用于该层次结构的操作;

  缺点:使增加新的数据结构变得困难了

  适用场景:适用于数据结构相对稳定的系统,把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化;

 模板模式

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

  实例:考试时统一的试卷
  这里写图片描述
  优点:把不变的行为移到超类,去除子类中的重复代码;提供了一个很好的代码复用平台;单一职责原则和开放封闭原则;

  缺点:抽象类中的具体实现步骤太多,会导致系统庞大混乱;

  适用场景:要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同;

 命令模式

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

  实例:烤羊肉串
  这里写图片描述
  优点:较容易设计一个命令队列;在需要的情况下,可以较容易的将命令记入日志;允许接收请求的一方决定是否要否决请求;容易实现对请求的撤销和重做;容易增加新的具体命令类;把请求一个操作的对象与知道怎么执行一个操作对象分隔开;

  缺点:可能会导致系统有过多的具体命令类

  适用场景:在真正需要如撤销或恢复操作等功能时;需要将请求调用者和请求接受者解耦;

 迭代器模式

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

  实例:公交车买票
  这里写图片描述
  优点:不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据;支持以不同的方式遍历;引入抽象层,增加类很方便,无需修改代码,满足开放封闭的原则;

  缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

  适用场景:需要访问一个聚焦对象,而且不管这些对象是什么都需要遍历的时候;

下接行为型模式(二)

猜你喜欢

转载自blog.csdn.net/m0_37508531/article/details/80549506