博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第19章 解释器模式(Interpreter Pattern)
阅读量:6966 次
发布时间:2019-06-27

本文共 2058 字,大约阅读时间需要 6 分钟。

原文 

解释器模式

 

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

    

     概述:

 

       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://cbisl.baihongyu.com/

你可能感兴趣的文章
用户黏性与垂直社区,互联网营销
查看>>
金山游戏研发改制新进展:计划本周发出正式公告
查看>>
艾伟:WCF从理论到实践(11)-异步
查看>>
艾伟也谈项目管理,如何做一个合格的项目经理
查看>>
cookie
查看>>
Hibernate学习(4)- Hibernate对象的生命周期
查看>>
windows模糊查询指定进程是否存在
查看>>
distcc配置
查看>>
sublime text 2 c++编译 环境 问题小结
查看>>
MySQL索引分析
查看>>
20170829
查看>>
android项目获得所有运行程序
查看>>
Volley框架学习
查看>>
css中常用的标签
查看>>
android studio无线真机调试------Android
查看>>
jsp指令与动作
查看>>
C++中关键字的理解--Static
查看>>
简述Core Location定位功能
查看>>
html搜索,文中的关键字变色
查看>>
Python标准库_ sys,random,time
查看>>