当前位置: 首页 > news >正文

【设计模式】解释器模式

解释器模式(Interpreter Pattern)


概念:
· 一种行为型设计模式;

· 核心思想是将文法规则定义为类的层次结构;
· 它把语言的语法规则封装成对象,通过对象之间的组合完成解释的过程;

UML结构:

+---------------------+
|    IExpression      | <<interface>>
+---------------------+
| +Interpret(): bool  |
+---------------------+▲|-----------------------------|            |             |
+----------------+ +----------------+ +----------------+ +----------------+
| BoolExpression | | AndExpression  | | OrExpression   | | NotExpression  |
+----------------+ +----------------+ +----------------+ +----------------+
| -_val: bool    | | -_left:IExpression | -_left:IExpression | -_expression:IExpression |
|                | | -_right:IExpression| -_right:IExpression|                     |
+----------------+ +----------------+ +----------------+ +----------------+
| +Interpret()   | | +Interpret()       | +Interpret()       | +Interpret()       |
+----------------+ +----------------+ +----------------+ +----------------+


代码示例:

/// <summary>
/// 解释器接口类
/// </summary>
public interface IExpression
{   /// <summary>/// 解释方法/// </summary>/// <returns>返回值</returns>bool Interpret();
}/// <summary>
/// 终端解释器
/// </summary>
public class BoolExpression : IExpression
{private bool _val;public BoolExpression(bool val){this._val = val;}public bool Interpret(){return _val;}
}/// <summary>
/// 非终端解释器(与操作)
/// </summary>
public class AndExpression : IExpression
{public IExpression _leftExpression;public IExpression _rightExpression;public AndExpression(IExpression leftExpression,IExpression rightExpression){this._leftExpression = leftExpression;this._rightExpression = rightExpression;}public bool Interpret(){return _leftExpression.Interpret() && _rightExpression.Interpret();}
}/// <summary>
/// 非终端解释器(或操作)
/// </summary>
public class OrExpression : IExpression
{public IExpression _leftExpression;public IExpression _rightExpression;public OrExpression(IExpression leftExpression,IExpression rightExpression){this._leftExpression = leftExpression;this._rightExpression = rightExpression;}public bool Interpret(){return _leftExpression.Interpret() || _rightExpression.Interpret();}
}/// <summary>
/// 非终端解释器(非操作)
/// </summary>
public class NotExpression : IExpression
{public IExpression _expression;public NotExpression(IExpression expression){this._expression = _expression;}public bool Interpret(){return !_expression.Interpret();}
}/// <summary>
/// 客户端
/// </summary>
public class Client
{public static void Main(){IExpression trueExpression = new BoolExpression(true);IExpression falseExpression = new BoolExpression(false);IExpression addExpression = new AndExpression(trueExpression, falseExpression);IExpression orExpression = new OrExpression(trueExpression, falseExpression);IExpression notExpression = new NotExpression(trueExpression);addExpression.Interpret();orExpression.Interpret();notExpression.Interpret();}
}


特点:
优点:

· 易于扩展:新增语法规则即新增类,不影响现有代码,符合开闭原则;
· 文法结构清晰:代码结构与文法结构相对应,便于维护和理解;

· 客户端可以自行组合表达式;
缺点:
· 文法的增多会导致类的增多,从而增加了系统的复杂度;

· 解释器的递归调用使得性能的需求增大;

适用场景:
· 问题可以用树形结构表示,则容易将每个语法规则封装成类;

· 当有一种语言需要解释执行,并且语法相对稳定;

· 当希望客户端能够方便地组合不同的表达式进行解释;

举例场景:
· SQL 解析器、正则表达式解释器;

· 计算器的计算表达式的解析;

· 配置文件和脚本语言的解释器;

http://www.dtcms.com/a/422561.html

相关文章:

  • 【前端知识】iframe 使用详细说明
  • 推荐一款集成AI功能的数据库管理工具
  • Flask 入门:轻量级 Python Web 框架的快速上手
  • 每日前端宝藏库 | tinykeys ✨
  • 第7章:TS快速入门和前端项目初始化
  • 合肥 做网站的深圳办公室装修设计公司
  • Android实现RecyclerView粘性头部效果,模拟微信账单列表的月份标题平移
  • 建三江建设局网站网站建设自我评价怎么写比较好
  • 华为Fit4手表:个性化表盘,让生活更有温度
  • Spring Boot - 从PF4J到SBP:深入解析Java插件化架构的演进与实践
  • 河南做网站企起做平面什么网站的素材不侵权
  • 哪个网站做ppt模板赚钱手机棋牌游戏平台
  • 鸿蒙app开发中 拿到json文件数据进行动画的播放
  • 第三章 鸽巢原理
  • 智慧政务——解读57页清华大学:DeepSeek政务场景应用与解决方案【附全文阅读】
  • Transformer模型:深度解析自然语言处理的革命性架构
  • 声网AI逐字拆解问题,30天重塑口语清晰表达
  • Java异常简介
  • VSCode Web版本安装
  • 实用软件 | 实时监控andriod设备硬件状态-devcheck
  • 非关系型数据库(NoSQL):特性、类型与应用指南​
  • 性能革命的底层逻辑:深入理解 Spring Cloud Gateway 的 Reactor 核心
  • 2025 年 AI+BI 趋势下,Wyn 商业智能软件如何重构企业决策效率?
  • 网站开发合同印花税公司网站建设重点内容
  • CMake cmake_parse_arguments
  • 4、存储系统架构 - 从机械到闪存的速度革命
  • 淘宝店铺全量商品接口深度开发:从分页优化到数据完整性保障
  • 视频MixformerV2 onnx导出
  • winfrom 的 BindingSource ,ist<T> + LINQ,DataTable + DataView 自动刷新机制 优势劣势
  • Spring Statemachine 架构详解