Net设计模式实例之解释器模式(Interpreter Pattern)(1)

简介:

一、解释器模式简介(Brief Intro du ction

解释器模式( Interpreter Pattern ),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。使用了解释器模式,可以很容易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容易直接编写。

二、解决的问题(What To Solve

如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题。

三、解释器模式分析(Analysis

1、解释器模式结构

AbstractExpression 抽象类 :声明一个接口,用于执行一个操作。
TerminalExpression :终结符表达式,实现与文法中的终结符相关的解释操作。
NonterminalExpression :非终结符表达式,为文法中的非终结符实现解释操作。对文法中每一条规则 R1 R2.......RN 都需要一个具体的非终结符表达式类。
Context :包含解释器之外的一些全局信息。

2、源代码

1 、抽象表达式 AbstractExpression
public  abstract class AbstractExpression
{
    public abstract void  Interpret(Context  context);
}
 
2 、终结符表达式 TerminalExpression
public  class TerminalExpression :AbstractExpression
{
    public override void  Interpret(Context  context)
     {
        Console .WriteLine(" 调用终止符表达式Terminal.Interpret()" );
     }
}
 
3 、非终结符表达式 NonterminalExpression
public  class NonterminalExpression :AbstractExpression
{
    public override void  Interpret(Context  context)
     {
        Console .WriteLine(" 调用非终止符表达式 Nonterminal.Interpret()" );
     }
}
 
4 、上下文类 Context
public  class Context
{
}
 
5 、客户端代码
static  void  Ma in (string [] args)
{
    Context  context = new Context ();
    Ar ray List  list = new Ar ray List ();
 
    // 填充语法树
     list.Add(new TerminalExpression ());
     list.Add(new NonterminalExpression ());
     list.Add(new TerminalExpression ());
     list.Add(new TerminalExpression ());
 
    // 解析
    foreach  (AbstractExpression  abstractExpression in  list)
     {
         abstractExpression.Interpret(context);
     }
    Console .ReadKey();
}

3、程序运行结果









本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/273753,如需转载请自行联系原作者

目录
相关文章
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
652 26
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
163 1
|
设计模式
设计模式-05建造者模式(Builder Pattern)
设计模式-05建造者模式(Builder Pattern)
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
377 16
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
373 0