java 之 解释器模式(大话设计模式)

在软件的世界里存在着翻译机,只不过在软件中我们称之为解释器。在系统中如果某一特定类型的问题在频繁的发生,此时我们就有必要将这些问题的实例表述为一个语言中句子,

因此可以构建一个解释器,然后利用该解释器来解释这些句子来解决这些问题。选择器模式

先看下类图。

大话设计模式类图

再看下笔者的例子。

/**
 * 内容
 */
public class Context {

    private String text;

    public Context(String text) {
        super();
        this.text = text;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}
/**
 * 抽象父类
 */
public abstract class AbstractExpression {

    public void Interpret(Context context) {
        if (null != context.getText() && context.getText().length() > 0) {
            String keyValue = context.getText().substring(0, 2);
            String key = keyValue.substring(0, 1);
            String value = keyValue.substring(1, 2);
            excute(key, value);
            if (context.getText().length() > 2) {
                context.setText(context.getText().substring(3));
            } else {
                context.setText("");
            }
        }
    }

    public abstract void excute(String key, String value);
}
/**
 * 大写字母转义
 */
public class CharacterExpression extends AbstractExpression{

    @Override
    public void excute(String key, String value) {
        System.out.print(key.getBytes()[0] + Integer.parseInt(value) + " ");
    }
}
/**
 * 小写字母转义
 */
public class SmallExpression extends AbstractExpression {

    @Override
    public void excute(String key, String value) {
        int tar = key.getBytes()[0] + Integer.parseInt(value);
        System.out.print((char)tar + " ");
    }
}
/**
 * 客户端
 */
public class Text {

    public static void main(String[] args) {
        Context context = new Context("A1 B2 C3 D4 a1 b1 c1 d2");
        AbstractExpression expression = null;
        while(context.getText().length() > 0) {
            String first = context.getText().substring(0, 1);
            if (Character.isLowerCase(first.charAt(0))) {
                expression = new SmallExpression();
            } else {
                expression = new CharacterExpression();
            }
            expression.Interpret(context);
        }
    }
}

 

运行结果如下

66 68 70 72 b c d f 

 

这是笔者对解释器模式的理解,希望能够帮助学习解释器模式的小伙伴。

posted @ 2017-12-26 17:10  红尾巴的猪  阅读(608)  评论(1编辑  收藏  举报