Junior — Middle
Можете ли да обясните разликите между моделите Adapter и Decorator в контекста на проектирането на софтуер?
sobes.tech AI
Отговор от AI
Шаблоните Adapter и Decorator често се бъркат, но имат различни цели и начини на приложение:
-
Adapter (Адаптер) — служи за преобразуване на интерфейса на един клас в интерфейса, който очаква клиентът. Използва се, когато трябва да накарате несъвместими интерфейси да работят заедно. Адаптерът обвива обекта и превежда извикванията на клиента към извиквания към адаптирания обект.
-
Decorator (Декоратор) — предназначен е за динамично добавяне на нови отговорности към обект без да променя неговия интерфейс. Декораторът обвива обекта и разширява или променя неговото поведение.
Ключови разлики:
- Adapter променя интерфейса на обекта, за да е съвместим с клиента.
- Decorator запазва интерфейса на обекта, но добавя ново поведение.
Пример на Java:
// Adapter: адаптиране на интерфейса
interface Target {
void request();
}
class Adaptee {
void specificRequest() {
System.out.println("Специфичен заявка");
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee a) { this.adaptee = a; }
public void request() {
adaptee.specificRequest();
}
}
// Decorator: добавяне на поведение
interface Component {
void operation();
}
class ConcreteComponent implements Component {
public void operation() {
System.out.println("Основна операция");
}
}
class Decorator implements Component {
protected Component component;
Decorator(Component c) { this.component = c; }
public void operation() {
component.operation();
}
}
class ConcreteDecorator extends Decorator {
ConcreteDecorator(Component c) { super(c); }
public void operation() {
super.operation();
System.out.println("Допълнително поведение");
}
}