Паттерн Адаптер (Adapter pattern) преобразует интерфейс класса к другому интерфейсу, на который рассчитан клиент. Адаптер обеспечивает совместную работу классов, невозможную в обычных условиях из-за несовместимости интерфейсов. Поэтому для использования клиента с несовместимым интерфейсом, необходимо создать адаптер, который выполняет преобразование.Таким образом клиент отделяется от реализованного интерфейса; и если ожидаются изменения интерфейса со временем, то адаптер способен инкапсулировать эти изменения, чтобы клиента не приходилось изменять каждый раз, когда ему потребуется работать с новым интерфейсом. Данный паттерн относится к структурным паттернам.
Ниже представлена диаграмма реализации данного паттерна.
Рассмотрим пример. Допустим мы имеем дело с резиновой уткой MallardDuck с интерфейсом
interface Duck {
public void quack();
public void fly();
}
и дикой индюшкой WildTurkey с интерфейсом
interface Turkey {
public void gooble();
public void fly();
}
Допустим, что нам необходимо работать с дикой индюшкой так, словно мы работаем с уткой. Для этого создадим необходимый адаптер TurkeyAdapter, который сослужит нам полезную работу:
/* Target class */
var MallardDuck = function () {
this.quack = function () {
console.log("Quack");
};
this.fly = function () {
console.log("I`m flying");
};
};
/* Adaptee class */
var WildTurkey = function () {
this.gooble = function () {
console.log("Gobble gooble");
};
this.fly = function () {
console.log("I`m flying a short distance");
};
};
/* Adapter class: interface WildTurkey to interface MallardDuck */
var TurkeyAdapter = function (turkey) {
var turkey = turkey;
this.quack = function () {
turkey.gooble();
};
this.fly = function () {
for (var i = 0; i < 5; i++) {
turkey.fly()
}
};
};
/* testing... */
var duck = new MallardDuck();
var turkey = new WildTurkey();
var turkeyAdapter = new TurkeyAdapter(turkey);
turkeyAdapter.quack();
turkeyAdapter.fly();
На выходе получаем ожидаемый результат
Gobble gooble
I`m flying a short distance
I`m flying a short distance
I`m flying a short distance
I`m flying a short distance
I`m flying a short distance
Всем удачи!