解釋器模式通過實現一個表達式介面,從而能夠以指定方式解析指定內容 介紹 解釋器模式屬於行為型模式,通過這種設計模式,我們可以定義一種特定的解釋器來解釋特定的業務場景,可以類比不同的編程語言的編譯器需要設計不同的解釋器來編譯執行。 類圖描述 代碼實現 1、定義表達式介面 2、創建介面實體 3、創建規則 ...
解釋器模式通過實現一個表達式介面,從而能夠以指定方式解析指定內容
介紹
解釋器模式屬於行為型模式,通過這種設計模式,我們可以定義一種特定的解釋器來解釋特定的業務場景,可以類比不同的編程語言的編譯器需要設計不同的解釋器來編譯執行。
類圖描述
代碼實現
1、定義表達式介面
public interface IExpression
{
bool Interpret(string context);
}
2、創建介面實體
public class TerminalExpression : IExpression
{
private string data;
public TerminalExpression(string data)
{
this.data = data;
}
public bool Interpret(string context)
{
return context.Contains(data);
}
}
public class AndExpression : IExpression
{
private IExpression expr1 = null;
private IExpression expr2 = null;
public AndExpression(IExpression expr1, IExpression expr2)
{
this.expr1 = expr1;
this.expr2 = expr2;
}
public bool Interpret(string context)
{
return expr1.Interpret(context) && expr2.Interpret(context);
}
}
public class OrExpression : IExpression
{
private IExpression expr1 = null;
private IExpression expr2 = null;
public OrExpression(IExpression expr1,IExpression expr2)
{
this.expr1 = expr1;
this.expr2 = expr2;
}
public bool Interpret(string context)
{
return expr1.Interpret(context) || expr2.Interpret(context);
}
}
3、創建規則,上層調用
class Program
{
static IExpression GetMaleExpression()
{
IExpression robert = new TerminalExpression("Robert");
IExpression john = new TerminalExpression("John");
return new OrExpression(robert, john);
}
static IExpression GetMarriedWomanExpression()
{
IExpression julie = new TerminalExpression("Julie");
IExpression married = new TerminalExpression("Married");
return new AndExpression(julie, married);
}
static void Main(string[] args)
{
IExpression isMale = GetMaleExpression();
IExpression isMarriedWoman = GetMarriedWomanExpression();
Console.WriteLine($"John is male? {isMale.Interpret("John")}");
Console.WriteLine($"Julie is a married women? {isMarriedWoman.Interpret("Married Julie")}");
Console.ReadKey();
}
}
總結
解釋器模式可利用的場景比較少,在遇到規則類的業務場景時可以考慮採用這種方式。