Թարգմանիչ (նախագծման ձևանմուշ)

Թարգմանիչ (), վարքագծային նախագծման ձևանմուշ, որը որոշում է թե նախադասությունները ինչ լեզվով պետք է ներկայացվեն։ Հիմնական նպատակն այն է, որ ունենալ դաս յուրաքանչյուր համակարգչային լեզվի համար։

Նախագծային ձևանմուշը ստեղծում է թարգմանիչներ, որոնք լուծում են հաճախակի հանդիպող և փոփոխման ենթակա խնդիրները։

Կիրառույթուն 
 Բնորոշում է տվյալների բազայի հերթը այնպիսի լեզուների համար, ինչպիսին օրինակ SQL լեզուն է։
 Բնորոշում է համակարգչային լեզուները, որն հաճախ օգտագործվում են կոմունիկացիոն պրոտակոլների () նկարագրման համար։
 Ծրագրավորման լեզուներից շատերի գլխավոր խնդիրն է ներառել մի քանի մասնագիտացված լեզուներ։

Առավելություններ 
Հեշտ է ընդլայնել և փոփոխել քերեկանությունը, դասերի իրականացումը։ Կարելի է հեշտությամբ փոփոխել արտահայտությունների հաշվարկման եղանակը։

Թերություններ 
Դժվար է իրականացնել այն քերականությունը, որն ունի բազմաթիվ քերեկանական կանոններ։

Օրինակներ

C# 
//IVSR: Interpreter design pattern
namespace IVSR.DesignPaterns.Interpreter
{
// "Context" 
 class Context 
 {
 }

 // "AbstractExpression" 
 abstract class AbstractExpression 
 {
 public abstract void Interpret(Context context);
 }

 // "TerminalExpression" 
 class TerminalExpression : AbstractExpression
 {
 public override void Interpret(Context context) 
 {
 Console.WriteLine("Called Terminal.Interpret()");
 }
 }

 // "NonterminalExpression" 
 class NonterminalExpression : AbstractExpression
 {
 public override void Interpret(Context context) 
 {
 Console.WriteLine("Called Nonterminal.Interpret()");
 } 
 }
 class MainApp
 {
 static void Main()
 {
 Context context = new Context();

 // Usually a tree 
 ArrayList list = new ArrayList();

 // Populate 'abstract syntax tree' 
 list.Add(new TerminalExpression());
 list.Add(new NonterminalExpression());
 list.Add(new TerminalExpression());
 list.Add(new TerminalExpression());

 // Interpret 
 foreach (AbstractExpression exp in list)
 {
 exp.Interpret(context);
 }

 // Wait for user 
 Console.Read();
 }
 }
}

Ծանոթագրություններ 

Ծրագրավորում