Adapter pattern

Trong công nghệ phần mềm, Adapter pattern(mẫu thiết kế tiếp hợp) là một mẫu thiết kế tiếp hợp cho phép chuyển đổi một interface có sẵn thành một interface khác thích hợp cho lớp đang viết. Một adapter cho phép các lớp làm việc với nhau, mà bình thường là không thể do sự không tương thích về interfaces, bằng cách bao đóng interface của riêng nó cho phù hợp với một lớp có sẵn.

Có hai loại mẫu điều hợp (adapter pattern):

  • Loại Object Adapter pattern - Trong loại mẫu adapter pattern này thì adapter chứa một thể hiện của lớp mà nó bao đóng. Trong tình huống này thì adapter sẽ thực hiện việc gọi hàm đến đối tượng thể hiện được bao đóng đó để thực hiện tác vụ cần thiết.
Mẫu Object Adapter biểu diễn bằng UML. Đối tượng adapter che giấu interface của adaptee khỏi client.
  • Loại Class Adapter pattern - Loại adapter này dùng đa kế thừa để đạt được mục đích này. Đối tượng adapter này được tạo ra bằng cách kế thừa các interfaces từ cả interface mong đợi và interface đã có sẵn. Đối tượng của mẫu Adapter rất hay được dùng ở các ngôn ngữ phổ biến, như Java, không được hỗ trợ đa kế thừa thực vì các nhà thiết kế các ngôn ngữ này cho rằng chúng là những thói quen không tốt.
Mẫu Class Adapter biểu diễn bằng UML.

Mẫu adapter rất hữu ích trong những tình huống khi tồn tại sẵn một lớp cung cấp một số hay toàn bộ dịch vụ mà bạn cần nhưng không có interface mà bạn cần. Một ví dụ tốt trong cuộc sống thực là một adapter chuyển interface của một Document Object Model từ một tài liệu XML thành một cấu trúc cây mà có thể hiển thị. Một liên kết đến một hướng dẫn sử dụng mẫu thiết kế được liệt kê ở bên dưới.

Ví dụ - Class Adaptor1

[sửa | sửa mã nguồn]
 /**
 * Java code sample 
 */
 
 interface Stack
 {
  void push (Object);
  Object pop ();
  Object top ();
 }
 
 /* DoubleLinkedList */
 class DList
 {
  public void insert (DNode pos, Object o) {... }
  public void remove (DNode pos, Object o) {... }
  
  public void insertHead (Object o) {... }
  public void insertTail (Object o) {... }
  
  public Object removeHead () {... }
  public Object removeTail () {... }
  
  public Object getHead () {... }
  public Object getTail () {... }
 }
 
 /* Adapt DList class to Stack interface */
 class DListImpStack extends DList implements Stack
 {
  public void push (Object o) {
 insertTail (o);
  }
  
  public Object pop () {
 return removeTail ();
  }
  
  public Object top () {
 return getTail ();
  }
 }

Ví dụ - Object Adapter

[sửa | sửa mã nguồn]
 /**
 * Java code sample
 */
 
 interface Stack
 {
  void push (Object o);
  Object pop ();
  Object top ();
 }
 
 /* DoubleLinkedList */
 class DList
 {
  public void insert (DNode pos, Object o) {... }
  public void remove (DNode pos, Object o) {... }
  
  public void insertHead (Object o) {... }
  public void insertTail (Object o) {... }
  
  public Object removeHead () {... }
  public Object removeTail () {... }
  
  public Object getHead () {... }
  public Object getTail () {... }
 }
 
 /* Adapt DList class to Stack interface */
 class DListStack implements Stack 
 { 
  private DList _dlist;
  
  public DListStack() { _dlist = new DList(); }
  public void push (Object o) {
 _dlist.insertTail (o);
  }
  
  public Object pop () {
 return _dlist.removeTail ();
  }
  
  public Object top () {
 return _dlist.getTail ();
  }
 }

Tham khảo

[sửa | sửa mã nguồn]

Liên kết ngoài

[sửa | sửa mã nguồn]
Chúng tôi bán
Bài viết liên quan
Bạn đang đầu tư (investing) hay là đánh bạc (gambling)?
Bạn đang đầu tư (investing) hay là đánh bạc (gambling)?
Bài viết này mục đích cung cấp cho các bạn đã và đang đầu tư trên thị trường tài chính một góc nhìn để cùng đánh giá lại quá trình đầu tư của bạn thực sự là gì
Thấy gì qua Upstream (2024) của Từ Tranh
Thấy gì qua Upstream (2024) của Từ Tranh
Theo số liệu của Trung tâm Nghiên cứu Việc làm mới của Trung Quốc, mức thu nhập trung bình của các tài xế loanh quanh 7000 NDT, tương ứng với 30 đơn giao mỗi ngày trong 10 ca làm 10 giờ liên tục
Download the Motorola Razr’s Retro App, Live Wallpapers
Download the Motorola Razr’s Retro App, Live Wallpapers
Foldable phones were a big story in 2019 but one brand stole the show with a heavy dose of nostalgia. Samsung’s Galaxy Fold may be a bigger, more powerful foldable, but it doesn’t have the same name recognition as the iconic razr. Motorola is well aware of this and they included several goodies to amp it up.
Tóm tắt nội dung chương 219 - Jujutsu Kaisen
Tóm tắt nội dung chương 219 - Jujutsu Kaisen
Mở đầu chương là về thời đại bình an. Tại đây mọi người đang bàn tán với nhau về Sukuna. Hắn được mời đến một lễ hội