步步为营 .NET 设计模式学习笔记 二十三、Interpreter(解释器模式)
概述
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
意图
给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。
结构图
角色说明:
AbstractExpression:
- 声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。
TerminalExpression:
- 实现和语法中末端符号相关的Interpret方法。
- 在每个句子的末端符号中均需要一个TerminalExpression实例。
NonterminalExpression:
另外一个实现了AbstractExpression 接口的类,用来处理语法树中非末端节点的语法。它含有下一个AbstractExpression(s)的引用,调用它每个子节点的Interpret方法。
Context:
Interpreter方法所需要的信息的容器,该信息对Interpreter而言全局可见。充当几个AbstractExpresssion 实例之间的通讯频道。
PatternClient:
构建或者接收一个抽象语法书的实例。对于一个特定的句子而言,语法树往往由若干个TerminalExpressions 和 NonterminalExpression组成。PatterClient在合适的context下,调用Interpret方法。
生活中的例子
在日常生活中英汉辞典的作用就是把中文翻译成英文或者是把英文翻译成中文,它的实现原理就是词典库里先把对应的中文和英文存在数据库表里,然后根据你输入的内容来匹配出相应的结果出来.
示例用例图
在公司里,借款单申请需要高管来审批,而高管又不会上班时间都坐在电脑面前,公司就有个系统,员工的借款申请都会通过手机短信方式来提示高管,高管可以通过回复短信来审批单据,高管一般都很懒,不愿回复太多的字,只能回复Y或y来表示同意,N或n表示拒绝,用四位标识码代替借款申请单号,用例图如下:
代码设计
先创建ReplyContent.cs:
01
/// <summary>
02
/// 回复内容
03
/// </summary>
04
public
class
ReplyContent
05
{
06
private
string
_ReplyText;
07
08
public
string
ReplyText
09
{
10
get
{
return
_ReplyText; }
11
set
{ _ReplyText = value; }
12
}
13
}
再创建InterPreter.cs:
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,