zl程序教程

您现在的位置是:首页 >  后端

当前栏目

设计模式java——解释器模式

2023-09-11 14:16:28 时间

解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式Demo:

/**
 * 2018年4月10日下午9:01:06
 */
package com.Designpattern;

/**
 * @author xinwenfeng
 *
 */
public class TestInterpreter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//	01	02	03	04	05	06	07	08	09	10
		//	a	b	c	d	e	f	g	h	i	j
		//	11	12	13	14	15	16	17	18	19	20
		//	k	l	m	n	o	p	q	r	s	t
		//	21	22	23	24	25	26
		//	u	v	w	x	y	z
		WordContext context = new WordContext();
		context.setText("U23L15U24L09U08L21L01L14U14L09");
		WordExpression expression = null;
		UpperWordExpression u = new UpperWordExpression();
		LowerWordExpression l = new LowerWordExpression();
		while(context.getText().length()>0) {
			if("U".equals(context.getText().substring(0, 1))) {
				expression = u;
			}else {
				expression = l;
			}
			expression.interpret(context);
		}
	}

}
class WordContext{
	private String text;

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
}
//解释器
abstract class WordExpression{
	public abstract void interpret(WordContext context);
}
class UpperWordExpression extends WordExpression{

	@Override
	public void interpret(WordContext context) {
		String word = context.getText().substring(1,3);//可放父类复用
		int num = Integer.parseInt(word);
		char returnWord = (char) ('a'+(num -1));
		context.setText(context.getText().substring(3));
		System.out.print((" "+returnWord).toUpperCase());
	}
	
}
class LowerWordExpression extends WordExpression{

	@Override
	public void interpret(WordContext context) {
		String word = context.getText().substring(1,3);
		int num = Integer.parseInt(word);
		char returnWord = (char) ('a'+(num -1));
		context.setText(context.getText().substring(3));
		System.out.print(returnWord);
	}
	
}

结果: