Interpreter解釋器設計模式的定義:給定一個語言,定義其文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 java
Interpreter解釋器設計模式角色以下: express
(1).抽象表達式(AbstractExpression)角色:聲明一個全部的具體表達式角色都須要實現的抽象接口。這個接口主要定義一個interpret()方法,稱作解釋操做。
(2).終結符表達式(TerminalExpression)角色:沒有子節點的表達式。
(3).非終結符表達式(NonterminalExpression)角色:有子節點的表達式,解釋操做以遞歸方式調用其子節點表達式。 編程
(4).上下文(Context)角色:上下文提供解釋器以外的一些全局信息,好比變量的真實量值等。 設計模式
Interpreter解釋器設計模式結構以下: spa
經過編寫一個模擬java中日期格式化爲指定字符串的例子來演示Interpreter解釋器設計模式,代碼以下: 設計
//抽象表達式 interface AbstractExpression{ public String format(Date date); } //具體的日期格式化表達式 class DataFormatExpression implements AbstractExpression{ private static final String pattern1 = 「yyyy-MM-dd」; private static final String pattern2 = 「yyyy/MM/dd」; private static final Calendar calendar = Calendar.getInstance(); //默認日期不分隔,如:20120606 private String separator = 「」; public DataFormatExpression(){} public DataFormatExpression(String pattern){ if(pattern1.equals(pattern)){ separator = 「-」; } else if(pattern2.equals(pattern)){ separator = 「/」; } } public String getYear(Calendar cal){ return cal.get(Calendar.YEAR) + 「」; } public String getMonth(Calendar cal){ int month = cal.get(Calendar.MONTH) + 1; return month < 10 ? 「0」 + month : 「」 + month; } public String getDay(Calendar cal){ int day = cal.get(Calendar.DAY_OF_MONTH); return day < 10 ? 「0」 + day : 「」 + day; } public String format(Date date){ calendar.setTime(date); return getYear(calendar) + separator + getMonth(calendar) + separator + getDay(calendar); } } public class InterpreterDemo{ public static void main(String[] args){ Date date = new Date(); AbstractExpression expression1 = new DataFormatExpression() System.out.println(expression1.format(date)); AbstractExpression expression2 = new DataFormatExpression(「yyyy-MM-dd」) System.out.println(expression2.format(date)); AbstractExpression expression3 = new DataFormatExpression(「yyyy/MM/dd」) System.out.println(expression3.format(date)); } }
Interpreter解釋器設計模式的應用場景: code
在軟件構建過程當中,若果某一特定領域的問題比較複雜,相似的模式不斷重複出現,若是使用普通的編程方式來實現將面臨很是頻繁的變化。在這種狀況下,將特定領域的問題表達爲某種語法規則下的句子,再構建一個解釋器來解釋這樣的句子,從而達到解決問題的目的。 orm
JDK中解釋器模式的應用: 遞歸