标签:实例 共享 code rri public nts express context center
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
解释器模式的作用:如果一个特定类型的问题发生的频率够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的一个特定的句子.这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题.
解释器模式的优缺点:
解释器模式结构图:
代码实现:
1 package com.cgj.pattern.interpreter; 2 3 /** 4 * 声明一个抽象的解释操作,这个接口为抽象语法树中所有节点所共享. 5 */ 6 public interface AbstractExpression { 7 8 public abstract void interpret(Context context); 9 }
1 package com.cgj.pattern.interpreter; 2 3 public class AExpression implements AbstractExpression { 4 5 @Override 6 public void interpret(Context context) { 7 System.out.println("解释器A"); 8 } 9 10 }
1 package com.cgj.pattern.interpreter; 2 3 public class BExpression implements AbstractExpression { 4 5 @Override 6 public void interpret(Context context) { 7 System.out.println("解释器B"); 8 } 9 10 }
1 package com.cgj.pattern.interpreter; 2 3 /** 4 * 包含解释器之外的一些全局信息 5 */ 6 public class Context { 7 8 private String input; 9 private String output; 10 11 public String getInput() { 12 return input; 13 } 14 15 public void setInput(String input) { 16 this.input = input; 17 } 18 19 public String getOutput() { 20 return output; 21 } 22 23 public void setOutput(String output) { 24 this.output = output; 25 } 26 27 }
1 package com.cgj.pattern.interpreter; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Test { 7 8 public static void main(String[] args) { 9 Context context = new Context(); 10 11 // 何时使用用哪个解释器,应该由Context的内容决定,此处省略该过程 12 List<AbstractExpression> expressions = new ArrayList<AbstractExpression>(); 13 expressions.add(new AExpression()); 14 expressions.add(new BExpression()); 15 expressions.add(new AExpression()); 16 expressions.add(new BExpression()); 17 expressions.add(new BExpression()); 18 expressions.add(new AExpression()); 19 20 for (AbstractExpression expression : expressions) { 21 expression.interpret(context); 22 } 23 } 24 25 }
(本随笔参考了 程杰老师的<<大话设计模式>>)
标签:实例 共享 code rri public nts express context center
原文地址:http://www.cnblogs.com/LionheartCGJ/p/7074843.html