Adapter

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:

adapter_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

AdapterRealWorldClassDiagram

http://cid-d0e5ddf023bf4324.office.live.com/embedicon.aspx/.Public/Design%20Pattern/AdapterRealWorld.zip

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s