学习而来,代码是自己敲的。也有些自己的理解在里边,有问题希望大家指出。

模式的定义与特点

解释器模式(Interperter Pattern),给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

模式的优点

  • 可扩展性比较好,灵活。
  • 增加了新的解释表达式的方式。
  • 易于实现简单文法。

模式的缺点

  • 可利用场景比较少。
  • 对于复杂的文法比较难维护。
  • 解释器模式会引起类膨胀。
  • 解释器模式采用递归调用方法。

using DesignPattern.InterpreterPattern;
using System; namespace DesignPattern
{
internal class Program
{
static void Main(string[] args)
{
InterpreterHelper();
} #region Pattern - Interpreter
static void InterpreterHelper()
{
Interpreter _root1 = new CheckContentsExistence("Root1");
Interpreter _root2 = new CheckContentsExistence("Root1");
Interpreter _orExpr1 = new OrExpression(_root1, _root2);
Console.WriteLine($"root 存在么:{_orExpr1.Interpret("root")}"); Console.WriteLine(); Interpreter _shanshan = new CheckContentsExistence("Shanshan");
Interpreter _pig = new CheckContentsExistence("pig");
Interpreter _isExpr2 = new AndExpression(_shanshan, _pig);
Console.WriteLine($"Shanshan is a little pig? {_isExpr2.Interpret("pig Shanshan")}");
Console.ReadLine();
}
#endregion }
} //====================================================================================== namespace DesignPattern.InterpreterPattern
{
/// <summary>
/// 解释器接口
/// </summary>
public interface Interpreter
{
/// <summary>
/// 解释器
/// </summary>
/// <param name="context">具体内容</param>
/// <returns></returns>
bool Interpret(string context);
} /// <summary>
/// 解释具体内容是否存在该元素中
/// </summary>
public class CheckContentsExistence : Interpreter
{
private string m_data; public CheckContentsExistence(string data)
{
this.m_data = data;
} public bool Interpret(string context)
{
if (context.Contains(m_data))
{
return true;
}
return false;
}
} /// <summary>
/// 或运算
/// </summary>
public class OrExpression : Interpreter
{
private Interpreter m_expr1 = null;
private Interpreter m_expr2 = null; public OrExpression(Interpreter expression1, Interpreter expression2)
{
this.m_expr1 = expression1;
this.m_expr2 = expression2;
} public bool Interpret(string context)
{
return m_expr1.Interpret(context) || m_expr2.Interpret(context);
}
} /// <summary>
/// 和运算
/// </summary>
public class AndExpression : Interpreter
{
private Interpreter m_expr1 = null;
private Interpreter m_expr2 = null; public AndExpression(Interpreter expression1, Interpreter expression2)
{
this.m_expr1 = expression1;
this.m_expr2 = expression2;
} public bool Interpret(string context)
{
return m_expr1.Interpret(context) && m_expr2.Interpret(context);
}
}
}

总结:

个人觉得,应该是一个框架中有些特殊处理的信息,或者内容需要被处理,就会用到解释器模式,比如框架中使用string,不希望在字符串中出现信息,那就重写string,在遇到信息时直接过滤、或者是找到替代信息进行替换。


希望大家:点赞,留言,关注咯~

唠家常

今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加QQ:841298494,大家一起进步。

  • 客官,看完get之后记得点赞哟!
  • 小伙伴你还想要别的知识?好的呀,分享给你们

今日推荐

行为型模式 - 解释器模式Interpreter的更多相关文章

  1. 【设计模式】行为型11解释器模式(Interpreter Pattern)

      解释器模式(Interpreter Pattern) 解释器模式应用场景比较小,也没有固定的DEMO,中心思想就是自定义解释器用来解释固定的对象. 定义:给定一个语言,定义它的文法表示,并定义一个 ...

  2. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  3. javascript设计模式 - 解释器模式(interpreter)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 23、Interpreter 解释器模式

    1.Interpreter 解释器模式 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问 ...

  5. C#设计模式学习笔记:(23)解释器模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8242238.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第十一个模式-- ...

  6. 折腾Java设计模式之解释器模式

    解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...

  7. Java设计模式----解释器模式

    计算器中,我们输入“20 + 10 - 5”,计算器会得出结果25并返回给我们.可你有没有想过计算器是怎样完成四则运算的?或者说,计算器是怎样识别你输入的这串字符串信息,并加以解析,然后执行之,得出结 ...

  8. 大话设计模式Python实现-解释器模式

    解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/ ...

  9. [Python设计模式] 第27章 正则表达式——解释器模式

    github地址:https://github.com/cheesezh/python_design_patterns 解释器模式 解释器模式,给定一个语言,定一个它的文法的一种表示,并定一个一个解释 ...

随机推荐

  1. java将流量KB转换为GB、MB、KB格式

    /** * 转换流量格式为xxGBxxMBxxKB * @param flow 156165(xxxxxx) */ public String changeFlowFormat(String flow ...

  2. java学习之JSP

    0x00前言 JSP:全拼写:java Server pages:java 服务器端页面 可以理解为一个特殊的页面:可以定义html代码也可以定义java的代码 定义:JSP是简化Servlet编写的 ...

  3. 黏包现象、struct模块和解决黏包问题的流程、UDP协议、并发编程理论、多道程序设计技术及进程理论 _

    目录 黏包现象 二.struct模块及解决黏包问题的流程 三.粘包代码实战 UDP协议(了解) 并发编程理论 多道技术 进程理论 进程的并行与并发 进程的三状态 黏包现象 什么是粘包 1.服务端连续执 ...

  4. C温故补缺(三):存储类声明符(auto,register,extern,static)

    auto,register,extern,static 四个存储类声明符,用于定义变量/函数的作用域和声明周期 ① auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型 被auto ...

  5. 使用c#的 async/await编写 长时间运行的基于代码的工作流的 持久任务框架

    持久任务框架 (DTF) 是基于async/await 工作流执行框架.工作流的解决方案很多,包括Windows Workflow Foundation,BizTalk,Logic Apps, Wor ...

  6. C#调用WPS转换文档到PDF的的实现代码。

    1.WPS安装,最好用这个版本别的版本不清楚,安装Pro Plus2016版本. https://ep.wps.cn/product/wps-office-download.html 2.添加相关的引 ...

  7. python-简单模块的使用

    提示:简单模块了解掌握 @ 目录 uuid模块 calendar日历模块 time模块 datetime模块 os模块 sys模块 random模块 json和pickle模块 json pickle ...

  8. <一>对象使用过程中背后调用了哪些方法

    代码1 #include <iostream> using namepspace std; class Test { public: Test(int a=10):ma(a){cout&l ...

  9. 3.8:使用R语言实现Apriori算法示例

    〇.目标 1.使用R语言实现Apriori算法完成关联规则挖掘:2.利用超市购物篮Groceries数据进行关联规则分析. 一.利用arules包加载Groceries数据集 二.探索和准备数据 三. ...

  10. 【Java SE进阶】Day06 线程、同步

    一.线程 1.多线程原理 流程图 内存图解说明 创建线程的方式 继承Thread类 实现 Runnable接口 2.继承Thead类 3.实现Runnable接口 实现接口,重写run方法 最终均需要 ...