Adapter Design Pattern

 

Hi. Chào các bạn. Đây là chủ đề design pattern.

Bài viết này chia sẻ với các bạn một design pattern tiếp theo, nhưng nó thuộc nhóm Structure Design Pattern.

Chúng ta cùng tìm hiểu về: Apdater Design Pattern.
1. Bài toán thực tếcho mẫu Adapter Design Pattern.

Adapter  thể hiện và trò trung gian giữa hai lớp. Nó giải quyết vấn đề không tương thích giữa hai lớp.

Xét một ví dụ thực tế:

Một cửa hàng bán đồ điện tử, và một nhà cung cấp dịch vụ, và hai đối tượng này không biết đến nhau.

Cả hai sẽ chọn một đối tượng trung gian để làm việc cho dễ dàng, đảm bảo quyền lợi hai bên.

Bên thứ 3 sẽ  có mối quan hệ với cả nhà cung cấp, và cửa hàng, để có thể kết nối cả hai  lại với nhau.

Như vậy, khi chúng ta có một bài toán cần kết nối được hai đối tượng không tương thích, không thể làm việc được với nhau.

Cần có một đối tượng trung gian, thì hãy nghĩ đến việc sử dụng Apdater Design Pattern.

 

2. Triển khai adapter design pattern với code c++

 

a. Lớp target:

#include <iostream>

using namespace std;
class Seller
{
public:
  virtual void info() = 0;
};

b. Lớp Adaptee.

// Legacy component
class ElectronicShop
{
public:
  ElectronicShop(int num_phone, int num_tablet)
  {
    num_phone_ = num_phone;
    num_tablet_ = num_tablet;
  }

  void ShowInfo()
  {
    std::cout << "Number of Phone: "<< num_phone_;
    std::cout << "Number of Tablet: "<< num_tablet_;
  }

private:
  int num_phone_;
  int num_tablet_;
};

c. Lớp Adapter.

class AdapterSeller: public Seller, private ElectronicShop
{
public:
  AdapterSeller(int num_p, int num_t): 
    ElectronicShop(num_p, num_t)
  {

  }

  virtual void info()
  {
    ShowInfo();
  }
};

int main()
{
  Seller *p_custom = new AdapterSeller(120, 200);
  p_custom->info();
}

Như vậy client sẽ bắt đầu từ target, thông qua adapter để có thể sử dụng được các chức năng, thuộc tính trong apdatee.

Đó là chính mẫu  thiết kế apdater.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.