GoF23种设计模式之行为型模式之解释器模式
一、概述
给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子。
二、适用性
当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候。
1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。
2.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。
三、参与者
1.AbstractExpression:声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
2.TerminalExpression: 实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。
3.NonterminalExpression:为文法中的非终结符实现解释(Interpret)操作。
4.Context:包含解释器之外的一些全局信息。
5.Client:构建(或被给定)表示该文法定义的语言中一个特定的句子的抽象语法树。该抽象语法树由NonterminalExpression和TerminalExpression的实例装配而成。调用解释操作。
四、类图
五、示例
AbstractExpression
- package cn.lynn.interpreter;
- public abstract class Language {
- public abstract void interpret();
- }
Expression
- package cn.lynn.interpreter;
- public class English extends Language {
- @Override
- public void interpret() {
- System.out.println("为网页添加英文解释器!");
- }
- }
- package cn.lynn.interpreter;
- public class Chinese extends Language {
- @Override
- public void interpret() {
- System.out.println("为网页添加中文解释器!");
- }
- }
Context
- package cn.lynn.interpreter;
- import java.util.ArrayList;
- import java.util.List;
- public class Page {
- private String content;
- private List<Language> list = new ArrayList<Language>();
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- public void addLanguage(Language lang) {
- list.add(lang);
- }
- public List<Language> getLanguages() {
- return list;
- }
- }
Client
- package cn.lynn.interpreter;
- public class Client {
- public static void main(String[] args) {
- Page page = new Page();
- page.addLanguage(new English());
- page.addLanguage(new Chinese());
- for (Language lang : page.getLanguages()) {
- lang.interpret();
- }
- }
- }
Result
- 为网页添加英文解释器!
- 为网页添加中文解释器!
转载于:https://www.cnblogs.com/huangwentian/p/7471487.html
GoF23种设计模式之行为型模式之解释器模式相关推荐
- GoF23种设计模式之行为型模式之策略模式
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述 定义一系列算法,把它们一个个都封装起来,并且让它们可以相互替换.策略模式使得算 ...
- 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...
- 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)
本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...
- 【Java】Java与GoF-23种设计模式
文章目录 设计模式概述 GoF-23种设计模式 设计模式的分类 设计模式的原则 设计模式在JDK的部分体现 Singleton Factory Abstract factory Adapter Com ...
- GOF23种设计模式在Java中的应用(part 3)
本文接续:GOF23种设计模式在Java中的应用(part 2) 行为型模式 行为型模式关注系统中对象之间的相互交互.,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11种模式. ...
- GOF23种设计模式在Java中的应用(part 1)
第二部分:GOF23种设计模式在Java中的应用(part 2) 一.GOF来源及简介 1.1 GOF23种设计模式简介 <Design Patterns: Elements of Reusab ...
- 【设计模式系列24】GoF23种设计模式总结及软件设计7大原则
设计模式总结及软件设计七大原则 设计模式系列总览 前言 软件设计7大原则 开闭原则(Open-Closed Principle,OCP) 里氏替换原则(Liskov Substitution Prin ...
- GOF23种设计模式在Java中的应用(part 2)
本文接续part1:GOF23种设计模式在Java中的应用(part 1) 结构型模式 结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题. – 分 ...
- GOF23种设计模式精解
创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton( ...
最新文章
- Spring Cloud【Finchley】-18 Zuul过滤器
- Centos7 systemctl使用
- oauth password模式_SpringBoot OAuth2.0 认证授权(密码模式)
- ASP.NET Core 3.0中支持AI的生物识别安全
- 数据可视化【九】单向数据流交互
- [剑指offer]面试题第[61]题[JAVA][扑克牌中的点数][HashSet][数组]
- 算命大仙的黄金时代?一年轻松赚5亿…..
- 中国联通在香港正式推出5G服务
- Redmi王腾:Redmi 10X还会带来全新滤镜
- 一个简单LEGv8处理器的Verilog实现【三】【工具使用和编程规范】
- 仿qq局域网聊天软件 c++ 非mfc 数据库
- android 横向长图,Android实现截超长图
- stm32L1xx系列低功模式配置+STOP模式+RTC唤醒
- Maxon Motor参数查询方法
- Spring Bean 作用域
- XX公司2014年互联网信息化工作规划
- 2020电子设计大赛——坡道行驶小车
- HikariPool-1 - Connection is not available, request timed out after 6000ms
- 一张图读懂中国互联网发展历程
- 超人说我最叼蝙蝠侠笑了 超级英雄战力排名
热门文章
- 谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题
- python subprocess_python subprocess
- 荣耀手机现在是鸿蒙,荣耀适配鸿蒙最新消息出现,华为不会让大家失望的
- datagrid表头与内容不对应_斜线表头竟然如此简单,花上3分钟学习,从此告别低颜值报表...
- 用计算机计算教学反思,《用计算器计算》教学反思
- linux php环境升级,php5.6升级到php7.1.10(Linux环境)
- php中介模式,中介者模式(Mediator pattern)详解及PHP实现
- 使用OpenCV,Python进行图像哈希(差分哈希 dHash)处理
- C++:随笔6---new\delete\虚方法\抽象方法
- 和12岁小同志搞创客开发:如何驱动LED数码管?