设计模式第1篇:解释器模式

2017-12-11  本文已影响4人  大厂offer

本文翻译自:https://www.journaldev.com/1635/interpreter-design-pattern-java

Interpreter Design Pattern

Interpreter Pattern Example

public class InterpreterContext {
    //二进制模式转字符串
     public String getBinaryFormat(int i){
        return Integer.toBinaryString(i);
    }
    //十六进制模式转字符串
    public String getHexadecimalFormat(int i){
        return Integer.toHexString(i);
    }
}

public interface Expression {

    String interpret(InterpreterContext ic);
}

public class IntToBinaryExpression implements Expression {

    private int i;
    
    public IntToBinaryExpression(int c){
        this.i=c;
    }
    @Override
    public String interpret(InterpreterContext ic) {
        return ic.getBinaryFormat(this.i);
    }

}
package com.journaldev.design.interpreter;

public class IntToHexExpression implements Expression {

    private int i;
    
    public IntToHexExpression(int c){
        this.i=c;
    }
    
    @Override
    public String interpret(InterpreterContext ic) {
        return ic.getHexadecimalFormat(i);
    }

}
public class InterpreterClient {

    public InterpreterContext ic;
    
    public InterpreterClient(InterpreterContext i){
        this.ic=i;
    }
    
    public String interpret(String str){
        Expression exp = null;
        //create rules for expressions
        if(str.contains("Hexadecimal")){
            exp=new IntToHexExpression(Integer.parseInt(str.substring(0,str.indexOf(" "))));
        }else if(str.contains("Binary")){
            exp=new IntToBinaryExpression(Integer.parseInt(str.substring(0,str.indexOf(" "))));
        }else return str;
        
        return exp.interpret(ic);
    }
    
    public static void main(String args[]){
        String str1 = "28 in Binary";
        String str2 = "28 in Hexadecimal";
        
        InterpreterClient ec = new InterpreterClient(new InterpreterContext());
        System.out.println(str1+"= "+ec.interpret(str1));
        System.out.println(str2+"= "+ec.interpret(str2));

    }
}
28 in Binary= 11100
28 in Hexadecimal= 1c

Interpreter Design Pattern Example Class Diagram(UML模型)

image.png

Important Points about Interpreter pattern

上一篇 下一篇

猜你喜欢

热点阅读