解释器模式

来源:互联网 发布:海王星炒股软件下载 编辑:程序博客网 时间:2024/06/05 10:08

解释器模式

解释器模式(Interpreter pattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。典型的代表为正则表达式。

解释器的作用在于,有一个大家都知道的说话规则,那么如果你说的话按照这个语法或则规则,我皆可以知道你这句话是什么意思,如在不同的语言地区,人们使用了不同的语言,不懂得这个语言发音规则以及音节代表的是什么,你就听不懂,如果别人知道就能听的懂。

实现解释器有下面几步,
1.定义一个解释器接口,
public abstract class AbstractExpression {public  abstract boolean interpreter(String context);}
2.实现具体的语法:
public class TELLengthExpression extends AbstractExpression{private int TelNumLength;public TELLengthExpression(int TelNumLength) {this.TelNumLength = TelNumLength;}@Overridepublic boolean interpreter(String context) {if (context.length() == TelNumLength) {return true;}return false;}}

这是一个判断长度是否正确的解释器。
public class TelNumCheck extends AbstractExpression{public TelNumCheck() {}@Overridepublic boolean interpreter(String context) {if (context.substring(0, 1).equals("1")) {return true;}return false;}}
这是一个判断是开始字母为1的解释器。
public class TelNoCheck extends AbstractExpression{private TELLengthExpression lengthExpression;private TelNumCheck numCheck;public TelNoCheck() {lengthExpression = new TELLengthExpression(11);numCheck = new TelNumCheck();}@Overridepublic boolean interpreter(String context) {if (numCheck.interpreter(context) && lengthExpression.interpreter(context)) {return true;}return false;}}
这是一个将长度判断和首字母为1判断与操作的解释器。
3.使用解释器
public class InterpreterDemo {public static void main(String[] args) {String telNo = "13823457899";String telNo1 = "1346789234";TelNoCheck telNoCheck = new TelNoCheck();boolean isTel = telNoCheck.interpreter(telNo);boolean isTel1 = telNoCheck.interpreter(telNo1);System.out.println(telNo+"is Tel Number:"+isTel);System.out.println(telNo1+"is Tel Number:"+isTel1);}

输出结果

13823457899is Tel Number:true

1346789234is Tel Number:false




原创粉丝点击