TerminalExpression: Dil bilgisindeki terminal ifadeler üzerinde işlem yapar.
Context: Yorumlanacak olan içerik.
Senaryo olarak bir projeye başlayacağımızı ve proje ekibinin verilerinin bir dizgi olarak geldiğini;
Geliştirici: G karakteri ve 4000 malitet.
Muhasebeci: M karakteri ve 3000 maliyet.
Takım Lideri: L karakteri ve 7000 maliyet.
varsayalım. Örnek senaryo olarak GGML olarak gelen bir dizginin; 2 geliştirici, 1 muhasebeci, 1 takım lideri olarak toplamda 18000 maliyet oluşturduğu anlaşılmaktadır. Bu işlemleri yapan kodu Interpreter tasarım deseni kullanarak gerçekleştirelim.
C# Kod Örneği:
// Yorumlanacak olan içeriktir.// UML diyagramındaki Context sınıfına denk gelir.classContext{publicstring formula;publicint totalPoint;}
// Dil bilgisindeki terminal ifadeler üzerinde işlem yapar.// UML diyagramındaki TerminalExpression sınıfına denk gelmektedir.classTeamLeadExpression:JobExpression{publicvoidInterpret(Context context) {if (context.formula.Contains('L')) {context.totalPoint+=7000; } }}
// Dil bilgisindeki terminal ifadeler üzerinde işlem yapar.// UML diyagramındaki TerminalExpression sınıfına denk gelmektedir.classAccountingExpression:JobExpression{publicvoidInterpret(Context context) {if (context.formula.Contains('M')) {context.totalPoint+=3000; } }}
// Dil bilgisindeki terminal ifadeler üzerinde işlem yapar.// UML diyagramındaki TerminalExpression sınıfına denk gelmektedir.classDeveloperExpression:JobExpression{publicvoidInterpret(Context context) {if (context.formula.Contains('G')) {context.totalPoint+=4000; } }}
classJobManager{publicList<IJobExpression> CreateExpressionTree(string formula) {List<IJobExpression> tree =newList<IJobExpression>();foreach (char role in formula) {switch (role) {case'G':tree.Add(newDeveloperExpression());break;case'M':tree.Add(newAccountingExpression());break;case'L':tree.Add(newTeamLeadExpression());break;default:thrownewException("Unexpected role!"); } }return tree; }publicvoidRunExpression(Context context) {foreach (IJobExpression expression inCreateExpressionTree(context.formula)) {expression.Interpret(context); } }}