Яка основна ідея патерну Interpreter?
Основна ідея патерну Interpreter (Інтерпретатор) - описати граматику простої мови (або формату даних) і реалізувати інтерпретатор, який може виконувати вирази цієї мови, перетворюючи їх на дії програми.
1. Суть
Патерн дозволяє створювати міні-мови усередині програми - набір правил, виразів і операцій, які можна читати, парсити і виконувати.
Кожне правило граматики представлене класом, що реалізує загальний інтерфейс interpret(Context).
Об'єднуючи ці класи, можна будувати дерева виразів, які інтерпретуються (виконуються) динамічно.
Простіше кажучи: Interpreter перетворює текст або символічні вирази на виконуване дерево.
2. Коли використовується
- Коли потрібно обробляти вирази за заданими правилами (формули, фільтри, скрипти, умови).
- Коли граматика невелика і стабільна.
- Коли потрібно дозволити користувачу задати команди або логіку у вигляді тексту.
3. Структура
- AbstractExpression - загальний інтерфейс з методом
interpret(Context). - TerminalExpression - елементарний вираз (число, змінна).
- NonTerminalExpression - складений вираз (операції, комбінації).
- Context - зберігає дані, необхідні для інтерпретації (змінні, оточення).
- Client - будує дерево виразів і запускає інтерпретацію.
4. Приклад (Java)
Інтерпретатор простих математичних виразів:
interface Expression {
int interpret();
}
class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) { this.number = number; }
public int interpret() { return number; }
}
class AddExpression implements Expression {
private Expression left, right;
public AddExpression(Expression left, Expression right) {
this.left = left; this.right = right;
}
public int interpret() { return left.interpret() + right.interpret(); }
}Використання:
Expression expr = new AddExpression(
new NumberExpression(5),
new AddExpression(new NumberExpression(2), new NumberExpression(3))
);
System.out.println(expr.interpret()); // 105. Переваги
- Дозволяє створювати власні мови і правила, не переписуючи код.
- Легко додавати нові типи виразів (нові класи).
- Код виразів стає структурованим і розширюваним.
6. Недоліки
- Швидко зростає кількість класів при складній граматиці.
- Підходить лише для простих мов (інакше краще використовувати парсери, ANTLR тощо).
Висновок
Патерн Interpreter дозволяє програмі розуміти і виконувати вирази, написані "міні-мовою", описуючи кожне правило граматики окремим класом і створюючи виконуване дерево виразів.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.