设计模式——行为型模式之解释器、中介者模式(23种基础设计模式到此完结,后序还会不断修改和更新,添加一些高级的设计模式MVC、IoC模式...)

文章目录

    • 一、解释器模式定义
    • 二、解释器结构和相关应用
      • 2.1解释器角色
      • 2.2简单应用
      • 2.3解释器模式优缺点
    • 三、中介者模式定义
    • 四、中介者模式结构
      • 4.1相关角色
      • 4.2 优缺点
    • 设计模式系列文章
    • 结尾


一、解释器模式定义

解释器模式:对于给定的输入,能够对其解析分解为更小的元素,并对其解释和组合

  • 用四则运算解释器举一个例子:输入一组四则运算表达式,能够对每个运算组进行切分,计算出结果然后层层组合出最终结果,这样的设计就属于解释器模式
  • 在Web应用中常用的Dispatcher(请求分发器也是一个解释器):它对于输入的请求进行解析,找到对应的控制器函数进行转发
  • 解释器就相当于一个翻译官,对输入的语言解释成我们想要的东西

设计模式——行为型模式之解释器、中介者模式(23种基础设计模式到此完结,后序还会不断修改和更新,添加一些高级的设计模式MVC、IoC模式...)_第1张图片

二、解释器结构和相关应用

2.1解释器角色

其中一共有四个角色:抽象表达式、终结符、非终结符、环境变量
设计模式——行为型模式之解释器、中介者模式(23种基础设计模式到此完结,后序还会不断修改和更新,添加一些高级的设计模式MVC、IoC模式...)_第2张图片

  • 抽象表达式(Expression):声明一个所有的具体表达式的抽象接口,一般直接为一个Interpret()解释操作
  • 终结符表达式(Terminal Expression):在可能的输入中,存在有最小的不可再分的元素称为终结符,终结符表达式就是对其进行解释,比如四则运算中的每一个变量值
  • 非终结符表达式(NonTerminal Expression):表示连接或者对终结符进行运算的元素,在四则运算中表示为加减乘除
  • 环境变量(Context):保存终结符或运算过程中的具体的值

2.2简单应用

public class Client{
	public static void main(String[] args){
		//环境变量,保存变量的值
		Context context=new Context();
		
		//终结符变量
		Variable a=new Variable();
		Variable b=new Variable();
		
		//终结符常量
		Constant c=new Constant(15);
		
		//环境变量,设置变量的值
		context.addValue(a,3);
		context.addValue(b,5);
		//解释器输入(a*b)/(15-a)
		Expression expression=new DIV(new MUL(a,b),new SUB(c,a));
		//传入变量,输出解释器运算结果
		System.out.println(expression.interpret(context));

2.3解释器模式优缺点

适用领域:需要将复杂问题表示成某种固定规则的语法,就能够构建一个上面这样的语法解释器来解析,能够应对变化较多,但是规则较少的问题。

优点:

  • 扩展性好:修改语法规则只需要去修改相应的非终结符,新增也不会影响原有的符号解释器

缺点:

  • 类膨胀:语法规则交复杂时,需要大量规则解释符类,因此适用于简单多变规则场景

三、中介者模式定义

中介者模式:用中介对象来连接其他部分,降低了其他部分对不必要的对象的依赖,独立的改变对象之间的交互

  • 简单的说:你买房需要找个中介,不然就得花一堆精力去保持和各个卖家的联系,不断的去了解情况,浪费了你本来就有限的时间和精力;而中介者相当于你和其他卖家的传话筒,避免了你与其他卖家(对象)的直接联系和不必要沟通,以及可能产生的不良后果

设计模式——行为型模式之解释器、中介者模式(23种基础设计模式到此完结,后序还会不断修改和更新,添加一些高级的设计模式MVC、IoC模式...)_第3张图片

四、中介者模式结构

4.1相关角色

不需要有固定结构,只要实现了一个类将其他有相互交互的类,组合起来由该类统一沟通调度即可

设计模式——行为型模式之解释器、中介者模式(23种基础设计模式到此完结,后序还会不断修改和更新,添加一些高级的设计模式MVC、IoC模式...)_第4张图片

  • Mediator:中介者,持有多个类,负责处理类与类之间交互的类,最常用的在开发中——Application类,负责总体调控其他类的行为
  • Class:任何类都可以,在一个中介者中需要相互之间有一定的依赖,比如某个方法需要另一个类的参与,类的修改会导致另一个类修改等

4.2 优缺点

优点:

  • 减少耦合:统一由中介者调配对象之间的交互,避免了对象之间的无意义引用
  • 责任独立:对象不必关注与其他对象的交互过程而专注于自身的逻辑实现,由中介者独立负责对象交互
  • 整体性:中介者把零散的对象整合成为了一个整体,功能也在整体中体现

缺点:

  • 中介者类可能由于包含的对象过多不易维护(设计多层中介者)
  • 中介者由于负责多个对象的逻辑交互,逻辑结构较为复杂

设计模式系列文章

系列文章:

一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理、适配器模式
六、结构型模式——外观模式
七、结构型模式——组合模式、桥接模式、享元模式
八、行为型模式——观察者模式
九、行为型模式——迭代器模式
十、行为型模式——模板方法、策略方法模式
十一、行为型模式——命令模式
十二、行为型模式——责任链模式
十三、行为型模式——状态模式、备忘录模式
十四、行为型模式——解释器、中介者模式


结尾

作者长期更新,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!

作者主攻Java Web方向,平时长期更新Java Web基础概念文章,以及算法和数据结构——【一日双题—见微知著】系列。同时设计模式系列也会尽快一月内完结

你可能感兴趣的:(设计模式,中介者模式,解释器模式,java,设计模式)