第19章 解释器模式(Interpreter Pattern)

原文 第19章 解释器模式(Interpreter Pattern)

解释器模式

 

     导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大。篇幅很长,我鼓足了劲看了半天的描述跟解释,可能是本人的水平有限,或者是耐心太差,看到一半就有点扛不住了。我感觉对于一个菜鸟或者是没接触过设计模式的人来说,在看设计模式的时候更希望作者能简短的用几行代码来描述设计模式,这样起码看完大体有个概念。

    

     概述:

 

       Interpreter模式也叫解释器模式,是由GoF提出的23种设计模式中的一种。Interpreter是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。

 

     结构图:

 

 

 代码举例(我已经最简单化了,一看即懂)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

 /// <summary>

    /// 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。

    /// </summary>

    class Context

    {

        private int sum;

        public int Sum

        {

            get return sum; }

            set { sum=value;}

        }

     

    }

    /// <summary>

    /// 解释器抽象类。

    /// </summary>

   abstract class AbstractExpreesion

    {

        public abstract void Interpret(Context context);

       

     

    }

    /// <summary>

    ///   解释器具体实现类。自加

    /// </summary>

    class PlusExpression : AbstractExpreesion

    {

        public override void Interpret(Context context)

        {

            int sum = context.Sum;

            sum++;

            context.Sum = sum;

 

        }

    }

    /// <summary>

    ///   解释器具体实现类。 自减

    /// </summary>

    class MinusExpression : AbstractExpreesion

    {

        public override void Interpret(Context context)

        {

            int sum = context.Sum;

            sum--;

            context.Sum = sum;

 

        }

    }

客户端调用


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

    class Program

    {

        static void Main(string[] args)

        {

            Context context = new Context();

            context.Sum = 10;

            List<AbstractExpreesion> list = new List<AbstractExpreesion>();

            //运行加法三次

            list.Add(new PlusExpression());

            list.Add(new PlusExpression());

            list.Add(new PlusExpression());

            //运行减法两次

            list.Add(new MinusExpression());

            list.Add(new MinusExpression());

            for (int i = 0; i < list.Count(); i++)

            {

                AbstractExpreesion expression = list[i];

                expression.Interpret(context);

            }

            Console.WriteLine(context.Sum);

            Console.ReadLine();

            //得出结果为11

        }

    }

  看完之后,是不是觉得很简单,无非是设定几个公式,然后统一进行执行。最终得到结果!设计模式代表的是一种思想,至于怎么千变万化就看大家的了

 

      适用场景:

 

        1.当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树,可以使用解释器模式。而当存在以下情况时该模式效果最好

        2.该文法的类层次结构变得庞大而无法管理。此时语法分析程序生成器这样的工具是最好的选择。他们无需构建抽象语法树即可解释表达式,这样可以节省空间而且还可能节省时间。

        3.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将他们装换成另一种形式,例如,正则表达式通常被装换成状态机,即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的

 

         设计模式系列文章入口:http://www.diyibk.com/post/39.html

时间: 2024-12-19 14:25:46

第19章 解释器模式(Interpreter Pattern)的相关文章

乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)

原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作者:webabcd 介绍 给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例 有一个Message实体类,某个类对它的操作有Get()方法.现在要求用具有某一规则的中文语法来执行这个操作. MessageModel using System;usin

适配器模式之解释器模式

设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 解释器模式 Interpreter Pattern 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子 通用类图 组成 抽象解释器 AbstractExpression 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成. 终结符表达

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

一.解释器模式简介(Brief Introduction) 解释器模式(Interpreter Pattern),给定一个语言,定义它的文法的一种表示,并定 义一个解释器,这个解释器使用该表示来解释语言中的句子.使用了解释器模式,可以很容 易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文 法.也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容 易直接编写. 二.解决的问题(What To Solve) 如果一种特定类型的问题发生的频率足够

第18章 备忘录模式(Memento Pattern)

原文  第18章 备忘录模式(Memento Pattern) 备忘录模式         概述: 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 定义(源于GoF<设计模式>):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.       结构图:        代码举例: 1 2 3 4 5 6 7 8 9 10

第23章 访问者模式(Visitor Pattern)

原文 第23章 访问者模式(Visitor Pattern) 访问者模式        导读:访问者模式是我个人认为所有行为模式中最为复杂的一种模式了,这个模式可能看一遍会看不懂,我也翻了好几个例子,依然不能很好的理解访问者模式的核心.下面这个例子是来源于大话设计模式中的例子,稍作了修改!后续如果我有更好的例子或者想法我会对本章进行完善.       概述:       一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作(神一般的语言).    

第20章 状态模式(State Pattern)

原文 第20章 状态模式(State Pattern) 状态模式        概述:           当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.         状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化.        意图:          允许一个对象在其内部状态改变时改变它的行为        结构图:                 举例:      

第12章 代理模式(Proxy Pattern)

原文   第12章 代理模式(Proxy Pattern) 代理模式   概述:   在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切.这就是本文要说的Proxy模式.   结构图:     举例:       代练游戏,玩游戏,自己不想花时间去升级.委托给代练.   1 2 3 4 5 6 7 8 9 10 11 12 13 14

第21章 策略模式(Strategy Pattern)

原文 第21章 策略模式(Strategy Pattern) 策略模式       导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见).       概述:         策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.     抽象策略角色: 策略类,通常由一个接口或者抽象类实现.     具体策略角色:包装了相关的算法和行为.     环境角色:持有一个策略类的

第15章 迭代器模式(Iterator Pattern)

原文 第15章 迭代器模式(Iterator Pattern) 迭代器模式(Iterator Pattern)      概述:           在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,