日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設計 > 淺談設計模式:解釋器模式(Interpreter Pattern)

淺談設計模式:解釋器模式(Interpreter Pattern)

來源:程序員人生   發(fā)布時間:2015-04-25 09:17:22 閱讀次數(shù):4617次

酷愛生活、享受文娛、專注技術,歡迎關注微信公眾號QGer,我們1起見證成長!
這里寫圖片描述
甚么是解釋器模式?

官方解釋:to define a representation of grammar of a given language, along with an interpreter that uses this representation to interpret sentences in the language。
定義1個給定語言的語法表達式,并用該表達式作為1個解釋器來解釋語言中的句子。

通俗解釋:給定1種語言及相干語法,根據(jù)這些語法定義1個語法表達式的解釋器,客戶端可使用這個解釋器來解釋這個語言中句子。

為何使用解釋器模式?

  • 語法表達式進行抽象封裝,易于修改及拓展,當這個語言新增了某種特性,可以通過繼承抽象表達式類來實現(xiàn)新的語言特性。

  • 每條語法都可以表示為1個表達式類,實現(xiàn)起來比較容易。

PS:該模式由于其結構特性,對復雜語法很難保護,履行效力比較低,因此實際開發(fā)中幾近不適用這個模式,但是其本身的結構和思想還是可以學習鑒戒1下的。

如何使用解釋器模式?
UML圖以下:
這里寫圖片描述

各個組件解釋:

  • AbstractExpression(抽象表達式):聲明1個抽象的解釋操作interpreter,這個接口為所有具體表達式角色(抽象語法樹中的節(jié)點)都要實現(xiàn)的。

  • TerminalExpression(終結表達式):實現(xiàn)了抽象表達式角色所要求的接口,主要是1個interpret()方法;文法中的每個終結符都有1個具體終結表達式與之相對應。比如有1個簡單的公式R=R1+R2,在里面R1和R2就是終結符,對應的解析R1和R2的解釋器就是終結符表達式。

  • NonTerminalExpression(非終結表達式):文法中的每條規(guī)則都需要1個具體的非終結符表達式,非終結符表達式1般是文法中的運算符或其他關鍵字,比如公式R=R1+R2中,“+”就是非終結符,解析“+”的解釋器就是1個非終結符表達式。

  • Client(客戶端):使用解釋器的角色。

  • Context(上下文):這個角色的任務1般是用來寄存文法中各個終結符所對應的具體值,比如R=R1+R2,我們給R1賦值100,給R2賦值200。這些信息需要寄存到環(huán)境角色中,很多情況下我們使用1個映照(Map)來充當環(huán)境角色就足夠了。

利用實例:
有這么1個簡單的需求,給予1個字符,讓你判斷是不是是數(shù)字字符(‘0’-‘9’),可以這么實現(xiàn):

1、定義1個抽象表達式

interface AbstractExpression { boolean interpret(Character character); }

2、定義終結表達式,即直接判斷字符是不是是數(shù)字字符

public class TerminalExpression implements AbstractExpression { @Override public boolean interpret(Character character) { //是不是是數(shù)字字符 return character.isDigit(character); } }

3、定義簡單的非終結表達式,and 、not 、or

public class AndExpression implements AbstractExpression { private AbstractExpression leftExpression; private AbstractExpression rightExpression; public AndExpression(AbstractExpression leftExpression, AbstractExpression rightExpression) { this.leftExpression = leftExpression; this.rightExpression = rightExpression; } @Override public boolean interpret(Character character) { return leftExpression.interpret(character) && rightExpression.interpret(character); } } public class NotExpression implements AbstractExpression { private AbstractExpression expression; public NotExpression(AbstractExpression expression) { this.expression = expression; } @Override public boolean interpret(Character character) { return !expression.interpret(character); } } public class OrExpression implements AbstractExpression { private AbstractExpression leftExpression; private AbstractExpression rightExpression; public OrExpression(AbstractExpression leftExpression, AbstractExpression rightExpression) { this.leftExpression = leftExpression; this.rightExpression = rightExpression; } @Override public boolean interpret(Character character) { return leftExpression.interpret(character) || rightExpression.interpret(character); } }

4、客戶端使用,這里由于相對簡單,不需要使用context組件:

public class Client { public static void main(String[] args) { Character digitCharacter = new Character('1'); Character notdigitCharacter = new Character('l'); AbstractExpression terminalExpression = new TerminalExpression(); AbstractExpression notExpression = new NotExpression(terminalExpression); AbstractExpression andExpression = new AndExpression(terminalExpression, notExpression); AbstractExpression orExpression = new OrExpression(terminalExpression, notExpression); System.out.println(andExpression.interpret(digitCharacter)); System.out.println(andExpression.interpret(notdigitCharacter)); System.out.println(orExpression.interpret(digitCharacter)); System.out.println(orExpression.interpret(notdigitCharacter)); } }
生活不易,碼農辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲天堂婷婷 | 久久久久久久国产精品 | 国产欧美精品一区二区三区四区 | 欧美二区三区四区 | 免费a视频 | 国产精品久久久久免费 | 久久成人欧美 | 91成人综合 | 嫩草影院免费观看 | 国产精品2 | 日韩国产欧美一区二区 | 91麻豆产精品久久久久久 | 成人午夜免费视频 | 亚洲成人二区 | 精品国产乱码久久久久久影片 | 国产成人av在线 | 欧美综合国产精品久久丁香 | 91嫩草影院在线观看 | 日本精品国产 | 国产精品视频1区 | 9999精品 | 久久久久av | 色在线播放 | 黄色一级大片在线免费看产 | 91精品国产综合久久久久 | 欧美日一区二区三区 | 亚洲视频精品在线 | 国产在线激情 | 久久久精品 | 欧美精品一区在线 | 大尺度网站在线观看 | 久久久国产精品 | 在线视频成人 | 一区在线免费观看 | 精品久久久影院 | 91久久精品 | av黄色在线 | 中文字幕国产区 | 久久久综合色 | 69xx视频| 久久精品国产一区二区三区 |