使用接口: 实现解释器模式 【条理不明】
使用抽象父类+接口: 实现解释器模式 【条理清晰】
<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)); } }