二十九 直譯器模式

2022-02-25 19:09:11 字數 1429 閱讀 3321

直譯器模式:

interpreter:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。

知識點:

字串匹配,判斷email,匹配**號碼等等。正規表示式就是直譯器模式的一種應用。

直譯器模式容易的改變和擴充套件方法。

直譯器模式為文法中的每一條規則至少定義了乙個類,因此包含許多規則的文法可能難以管理和維護。

demo1

//抽象表示式,宣告抽象的解釋操作

abstract class abstractexpression

public abstract void interpret(contextcontext);

//終結符表示式,實現與文法中的終結符相關的解釋操作。

//主要是interpret()方法。文法中每乙個終結符都有乙個具體終結表示式與之相對應

class terminalexpression :abstractexpression

public override void interpret(context context)

console.writeline("終端直譯器");

//非終結符表示式,對文法中每一條規則r1,r2...都需要乙個具體的非終結符表示式類

class nonterminalexpression :abstractexpression

public override void interpret(context context)

console.writeline("非終端直譯器");

//包含直譯器之外的一些全域性資訊

class context

private string input;

public string input

get

set

private string output;

public string output

get

set

static void main(stringargs)

context context = new context();

ilistlist = newlist();

list.add(new terminalexpression());

list.add(new nonterminalexpression());

list.add(new terminalexpression());

list.add(new terminalexpression());

foreach (abstractexpression exp in list)

exp.interpret(context);

console.readkey();

黑板模式(二十九)

黑板模式 blackboarddesignpattern 是觀察者模式的乙個擴充套件,知名度並不高,但是我們使用的範圍卻非常廣。黑板模式的意圖如下 允許訊息的讀寫同時進行,廣泛地互動訊息。簡單地說,黑板模式允許多個訊息讀寫者同時存在,訊息的生產者和消費者完全分開。這就像乙個黑板,任何乙個教授 訊息的...

第二十九節,裝飾器

裝飾器簡介 裝飾器,用於裝飾某個函式,或者方法,或者類 裝飾可以用於某個函式或者方法或者類在執行之前或者執行後做某些操作,也可以理解為,為某個函式或者方法或者類新增功能 好處 是不用改變原來的函式,就可以給原來的函式新增功能 方法 1,定義乙個函式,裡面傳乙個值用於接收被裝飾函式的名稱 叫做裝飾器函...

第二十九節,裝飾器

第二十九節,裝飾器 裝飾器簡介 裝飾器,用於裝飾某個函式,或者方法,或者類 裝飾可以用於某個函式或者方法或者類在執行之前或者執行後做某些操作,也可以理解為,為某個函式或者方法或者類新增功能 好處 是不用改變原來的函式,就可以給原來的函式新增功能 方法 1,定義乙個函式,裡面傳乙個值用於接收被裝飾函式...