设计模式系列 - 解释器模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式系列 - 解释器模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解釋器模式通過實(shí)現(xiàn)一個表達(dá)式接口,從而能夠以指定方式解析指定內(nèi)容
介紹
解釋器模式屬于行為型模式,通過這種設(shè)計模式,我們可以定義一種特定的解釋器來解釋特定的業(yè)務(wù)場景,可以類比不同的編程語言的編譯器需要設(shè)計不同的解釋器來編譯執(zhí)行。
類圖描述
代碼實(shí)現(xiàn)
1、定義表達(dá)式接口
public interface IExpression {bool Interpret(string context); }2、創(chuàng)建接口實(shí)體
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、創(chuàng)建規(guī)則,上層調(diào)用
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();} }總結(jié)
解釋器模式可利用的場景比較少,在遇到規(guī)則類的業(yè)務(wù)場景時可以考慮采用這種方式。
轉(zhuǎn)載于:https://www.cnblogs.com/hippieZhou/p/10085500.html
總結(jié)
以上是生活随笔為你收集整理的设计模式系列 - 解释器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django后台管理
- 下一篇: vue $data data