Khái niệm:
Chuyển interface của một lớp thành interface khác mà các client mong muốn. Adapter để cho các lớp làm việc với nhau có thể không bới vì các interface không tương thích.
Mức độ sử dụng: vừa
UML Class Diagram:
Những lớp và/hoặc đối tượng trong mẫu thiết kế này:
- Target (ChemicalCompound): định nghĩa một domain-specific interface mà Client sử dụng.
- Adapter (Compound): làm cho Adaptee interface tương thích với Target interface.
- Adaptee (ChemicalDatabank): xác định một interface đang tồn tại cần làm tương thích.
- Client (AdapterApp): phối hợp các đối tượng phù hợp cho Target interface.
Adapter: khi nào dùng và dùng ở đâu
Các lập trình viên .NET viết các lớp đưa ra các phương thức được gọi bởi các client. Hầu hết thời gian chúng có thể điều khiển các interface, nhưng có một số trường hợp, chẳng hạn khi dùng các thư viên của hãng thứ 3, nơi chúng không thể làm được điều đó. Thư viện của hãng thứ 3 thực thi các dịch vụ được mong đợi nhưng các phương thức của interface và các tên của thuộc tính khác biệt so với những gì client mong đợi. Đây là một trường hợp mà bạn cần sử dụng mẫu thiết kế Adapter. Adapter cung cấp một interface mà client mong đợi sử dụng những dịch vụ của một lớp với một interface khác. Các adapter thường được sử dụng trong các môi trường lập trình nơi mà các thành phần hoặc các ứng dụng mới cần được tích hợp và làm việc với nhau với các thành phần đang tồn tại.
Các adapter cũng hữu ích trong các trường hợp refactor. Giả sử bạn có 2 lớp thực thi các chức năng khác nhau nhưng có các interface khác nhau. Client sử dụng cả 2 lớp này, nhưng phần code thì sẽ không thật rõ ràng và đơn giản hơn để hiểu nếu chúng cùng chia sẻ một interface. Bạn không thể thay thế interface này, nhưng bạn có thể “che” những khác biệt này bằng cách sử dụng Adapter cho phép client kết nối thông qua một interface chung. Adapter này xử lý việc ánh xạ giữa interface được chia sẻ và các interface gốc.
Demo