直譯器模式:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋該語言中的句子。
適用於:如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實力表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器:該直譯器通過解釋這些句子來解決該問題。
當有乙個語言需要解釋執行時,並且你可將該語言中的句子表示為乙個抽象語法樹時,可以使用直譯器模式。
好處:很容易改變和擴充套件文法,因為該模式使用類來表示文法規則,你可以使用整合來改變或擴充套件該文法。也比較容易實現文法,因為定義抽象語法樹中各個節點的類的實現大體類似,這些類都易於直接編寫。
缺點:為文法中的每一條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理和維護。當文法非常複雜時,使用其他的技術如語法分析程式或編譯器生成器來處理。
說白了,就是將一句話,轉變成實際的命令執行。
例項:正規表示式的解析。
abstractexpression(抽象表示式),生命乙個抽象的解釋操作,這個藉口為抽象語法樹中所有的節點所共享。
terminalexpression(終結符表示式):實現與文法中的終結符相關聯的解釋操作。實現抽象表示式中所要求的藉口,主要是interpret()方法。文法中每乙個終結符都有乙個具體終結表示式與之相對應。
nonterminalexpression(非終結符表示式):為文法中的非終結符實現解釋操作,對文法中的每一條規則r1,r2,…,rn都需要乙個具體的非終結符表示式類。通過實現抽象表示式的interpret()方法實現解釋操作。解釋操作以遞迴方式呼叫上面所提到的代表r1,r2,…,rn中各個符號的例項變數。
main.cpp
#include #include #include #include #include "context.h"
#include "abstractexpression.h"
using namespace std;
void process()
}int main(int argc,char* argv)
context.h
#ifndef context_h
#define context_h
#include using namespace std;
class context
;#endif
context.cpp
#include "context.h"
context::context(void)
context::~context(void)
abstractexpression.h
#ifndef abstactepression_h
#define abstactepression_h
class context;
//抽象表示式
class abstractexpression
;//終結符表示式
class terminalexpression : public abstractexpression
;//非終結符表示式
class nonterminalexpression : public abstractexpression
;#endif
abstractexpression.cpp
#include "abstractexpression.h"
#include using namespace std;
abstractexpression::abstractexpression(void)
abstractexpression::~abstractexpression(void)
void abstractexpression::interpret(const context& context)
void terminalexpression::interpret(const context& context)
void nonterminalexpression::interpret(const context& context)
設計模式 委派模式 注重結果的老闆
委派模式不屬於23中設計模式中的一種。他和 模式很像,負責任務的呼叫和分配,可以看做是一種特殊情況下的靜態 的全權 但是 注重過程,而委派注重結果。委派模式在spring中應用很多,比如dispatchservlet就用到了委派模式。現在我們來實現乙個場景,老闆給專案經理下達任務,專案經理就會根據情...
你還不懂Redis的發布訂閱模式呢?
一 什麼是發布訂閱 其實就是mq,被訂閱者寫訊息,訂閱者們實時讀到訊息進行處理。在說這之前,前面提到的list型別blpop也是可以模擬單播阻塞佇列的。但是他終歸是模擬。redis為我們提供了屬於他自己的發布訂閱。核心命令 只有已訂閱的客戶端才能收到訊息,比如我給test傳送了一條helloworl...
用同理心顛覆你的產品設計流程
我先前在 myedu 擔任設計副總裁,我們致力於幫助大學生順利完成學業,展現他們的學術成就,並找到工作。最初,myedu 提供一系列免費的學業規劃工具,包括日程規劃器。我們正式擬定了乙個鎖定大學院校招聘活動的商業模式,並針對大學生與招聘人員 進行了行為與同理心的研究。這類質性研究,著重的是人們做了什...