java设计模式9----解释器模式

使用接口: 实现解释器模式 【条理不明】


使用抽象父类+接口: 实现解释器模式 【条理清晰】

      <A>使用UML类图


 <B>使用百度脑图---画类的关系结构图


编码测试:


/**抽象父类: 数值类型**/
public abstract class Value {
	//属性: 值
	protected int a;
	
	//抽象方法
	public abstract int getValFromContainor(Containor con);
}
//数据类型Value: 子类2
public class Var extends Value {

	//从容器中: 取出数据
	@Override
	public int getValFromContainor(Containor con) {
		
		return con.getVal(this);
	}

}
//数据类型Value: 子类1
public class Constant extends Value {
	//构造方法
	public  Constant (int a) {
		this.a=a;
	}

	//从容器中: 取出数据--返回本身的常量
	@Override
	public int getValFromContainor(Containor con) {
		return a;
	}

}
//数据: 存储容器
public class Containor {
	//map容器
	private Map<Value,Integer> map=new HashMap<>();
	
	//对外的操作接口: 存取数据
	public int getVal(Value key) {
		return map.get(key);
	}
	
	public void addVal(Value key,Integer val) {
		map.put(key, val);
	}
}

//===============数据操作:类===================

//接口:拿到数据容器, 取出数据进行处理
public interface OperaValue {
	void handle(Containor con);
}
//接口实现类1:

//数字相加:操作
public class AddOperation implements OperaValue {
	
	//属性: 两个Value 对象
	private Value a,b;
	
	//构造方法
	public AddOperation(Value a, Value b) {
		this.a = a;
		this.b = b;
	}

	//拿到数据容器, 取出数据进行处理-->相加
	@Override
	public void handle(Containor con) {
		int x=a.getValFromContainor(con);
		int y=b.getValFromContainor(con);
		
		System.out.println(x+"+"+y+"===>"+(x+y));
	}
}
//接口实现类2:数字相加:操作
public class SubtractOperation implements OperaValue {
	
	//属性: 两个Value 对象
	private Value a,b;
	
	//构造方法
	public SubtractOperation(Value a, Value b) {
		this.a = a;
		this.b = b;
	}

	//拿到数据容器, 取出数据进行处理-->相减
	@Override
	public void handle(Containor con) {
		
		int x=a.getValFromContainor(con);
		int y=b.getValFromContainor(con);
		
		System.out.println(x+"-"+y+"===>"+(x-y));
	}
}







猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/80781665