解释器模式

解释器模式

解释器模式(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;
	}
	
	
	@Override
	public boolean interpreter(String context) {
		
		if (context.length() == TelNumLength) {
			return true;
		}
		
		return false;
	}
	
	
}

这是一个判断长度是否正确的解释器。
public class TelNumCheck extends AbstractExpression{
	
	
	public TelNumCheck() {
		
	}
	
	
	@Override
	public 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();
		
	}
	
	
	@Override
	public 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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值