一、概述

        给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子。

二、适用性             

当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候。

1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。

2.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。

三、参与者

1.AbstractExpression:声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
2.TerminalExpression: 实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。
3.NonterminalExpression:为文法中的非终结符实现解释(Interpret)操作。
4.Context:包含解释器之外的一些全局信息。
5.Client:构建(或被给定)表示该文法定义的语言中一个特定的句子的抽象语法树。该抽象语法树由NonterminalExpression和TerminalExpression的实例装配而成。调用解释操作。

四、类图

五、示例

AbstractExpression

[java] view plaincopy print?
  1. package cn.lynn.interpreter;
  2. public abstract class Language {
  3. public abstract void interpret();
  4. }

Expression

[java] view plaincopy print?
  1. package cn.lynn.interpreter;
  2. public class English extends Language {
  3. @Override
  4. public void interpret() {
  5. System.out.println("为网页添加英文解释器!");
  6. }
  7. }
[java] view plaincopy print?
  1. package cn.lynn.interpreter;
  2. public class Chinese extends Language {
  3. @Override
  4. public void interpret() {
  5. System.out.println("为网页添加中文解释器!");
  6. }
  7. }

Context

[java] view plaincopy print?
  1. package cn.lynn.interpreter;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Page {
  5. private String content;
  6. private List<Language> list = new ArrayList<Language>();
  7. public String getContent() {
  8. return content;
  9. }
  10. public void setContent(String content) {
  11. this.content = content;
  12. }
  13. public void addLanguage(Language lang) {
  14. list.add(lang);
  15. }
  16. public List<Language> getLanguages() {
  17. return list;
  18. }
  19. }

Client

[java] view plaincopy print?
  1. package cn.lynn.interpreter;
  2. public class Client {
  3. public static void main(String[] args) {
  4. Page page = new Page();
  5. page.addLanguage(new English());
  6. page.addLanguage(new Chinese());
  7. for (Language lang : page.getLanguages()) {
  8. lang.interpret();
  9. }
  10. }
  11. }

Result

[java] view plaincopy print?
  1. 为网页添加英文解释器!
  2. 为网页添加中文解释器!

转载于:https://www.cnblogs.com/huangwentian/p/7471487.html

GoF23种设计模式之行为型模式之解释器模式相关推荐

  1. GoF23种设计模式之行为型模式之策略模式

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述 定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换.策略模式使得算 ...

  2. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  3. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  4. 【Java】Java与GoF-23种设计模式

    文章目录 设计模式概述 GoF-23种设计模式 设计模式的分类 设计模式的原则 设计模式在JDK的部分体现 Singleton Factory Abstract factory Adapter Com ...

  5. GOF23种设计模式在Java中的应用(part 3)

    本文接续:GOF23种设计模式在Java中的应用(part 2) 行为型模式 行为型模式关注系统中对象之间的相互交互.,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11种模式. ...

  6. GOF23种设计模式在Java中的应用(part 1)

    第二部分:GOF23种设计模式在Java中的应用(part 2) 一.GOF来源及简介 1.1 GOF23种设计模式简介 <Design Patterns: Elements of Reusab ...

  7. 【设计模式系列24】GoF23种设计模式总结及软件设计7大原则

    设计模式总结及软件设计七大原则 设计模式系列总览 前言 软件设计7大原则 开闭原则(Open-Closed Principle,OCP) 里氏替换原则(Liskov Substitution Prin ...

  8. GOF23种设计模式在Java中的应用(part 2)

    本文接续part1:GOF23种设计模式在Java中的应用(part 1) 结构型模式 结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题. – 分 ...

  9. GOF23种设计模式精解

    创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton( ...

最新文章

  1. Spring Cloud【Finchley】-18 Zuul过滤器
  2. Centos7 systemctl使用
  3. oauth password模式_SpringBoot OAuth2.0 认证授权(密码模式)
  4. ASP.NET Core 3.0中支持AI的生物识别安全
  5. 数据可视化【九】单向数据流交互
  6. [剑指offer]面试题第[61]题[JAVA][扑克牌中的点数][HashSet][数组]
  7. 算命大仙的黄金时代?一年轻松赚5亿…..
  8. 中国联通在香港正式推出5G服务
  9. Redmi王腾:Redmi 10X还会带来全新滤镜
  10. 一个简单LEGv8处理器的Verilog实现【三】【工具使用和编程规范】
  11. 仿qq局域网聊天软件 c++ 非mfc 数据库
  12. android 横向长图,Android实现截超长图
  13. stm32L1xx系列低功模式配置+STOP模式+RTC唤醒
  14. Maxon Motor参数查询方法
  15. Spring Bean 作用域
  16. XX公司2014年互联网信息化工作规划
  17. 2020电子设计大赛——坡道行驶小车
  18. HikariPool-1 - Connection is not available, request timed out after 6000ms
  19. 一张图读懂中国互联网发展历程
  20. 超人说我最叼蝙蝠侠笑了 超级英雄战力排名

热门文章

  1. 谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题
  2. python subprocess_python subprocess
  3. 荣耀手机现在是鸿蒙,荣耀适配鸿蒙最新消息出现,华为不会让大家失望的
  4. datagrid表头与内容不对应_斜线表头竟然如此简单,花上3分钟学习,从此告别低颜值报表...
  5. 用计算机计算教学反思,《用计算器计算》教学反思
  6. linux php环境升级,php5.6升级到php7.1.10(Linux环境)
  7. php中介模式,中介者模式(Mediator pattern)详解及PHP实现
  8. 使用OpenCV,Python进行图像哈希(差分哈希 dHash)处理
  9. C++:随笔6---new\delete\虚方法\抽象方法
  10. 和12岁小同志搞创客开发:如何驱动LED数码管?