Adapter Design Pattern (Mẫu Thiết kế Bộ Chuyển Đổi) là một mẫu thiết kế cấu trúc trong lập trình hướng đối tượng. Nó cho phép các lớp (class) với các giao diện không tương thích có thể làm việc cùng nhau bằng cách chuyển đổi giao diện của một lớp thành giao diện mà lớp khác mong đợi.
Đọc xong khái niệm không hiểu gì trơn? yên tâm hãy đọc code sau:
class OldCoffeeMachine {
makeBlackCoffee() {
console.log('Pha cà phê đen...');
}
makeCoffeeWithMilk() {
console.log('Pha cà phê sữa...');
}
}
// CoffeeApp (Ứng dụng di động)
class CoffeeApp {
constructor(coffeeMachineAdapter) {
this.coffeeMachineAdapter = coffeeMachineAdapter;
}
makeIcedBlackCoffee() {
this.coffeeMachineAdapter.makeBlackCoffee();
console.log('Thêm đá...');
}
makeHotCoffeeWithMilk() {
this.coffeeMachineAdapter.makeCoffeeWithMilk();
console.log('Làm nóng...');
}
}
// CoffeeMachineAdapter (Bộ chuyển đổi)
class CoffeeMachineAdapter {
constructor(oldCoffeeMachine) {
this.oldCoffeeMachine = oldCoffeeMachine;
}
makeBlackCoffee() {
this.oldCoffeeMachine.makeBlackCoffee();
}
makeCoffeeWithMilk() {
this.oldCoffeeMachine.makeCoffeeWithMilk();
}
}
// Sử dụng
const oldCoffeeMachine = new OldCoffeeMachine();
const adapter = new CoffeeMachineAdapter(oldCoffeeMachine);
const coffeeApp = new CoffeeApp(adapter);
coffeeApp.makeIcedBlackCoffee();
// Output:
// Pha cà phê đen...
// Thêm đá...
coffeeApp.makeHotCoffeeWithMilk();
// Output:
// Pha cà phê sữa...
// Làm nóng...
OldCoffeeMachine
.CoffeeMachineAdapter
, truyền oldCoffeeMachine
vào constructor.CoffeeApp
, truyền adapter
vào constructor.CoffeeApp
để điều khiển máy pha cà phê cũ một cách dễ dàng, thông qua Adapter.ok, hiểu đúm hong?
Nôm na Adapter pattern cũng giống như decorator nhưng nó sẽ gắn thêm sức năng, chứ không phải thừa hưởng+ imporve cho method đó