Mẫu hợp tử

Trong công nghệ phần mềm, mẫu hợp tử (Tiếng Anh: Composite pattern) là một mẫu thiết kế phân vùng. Mẫu hợp tử mô tả một nhóm các đối tượng được đối xử giống như với một thực thể đơn lẻ của cùng loại đối tượng đó. Mục đích của một hợp tử là để "tổng hợp" các đối tượng thành các cấu trúc cây để diễn tả hệ thứ bậc từng phần. Việc thực hiện mẫu hợp tử sẽ cho phép các "khách" đối xử với các đối tượng và hợp tử riêng lẻ một cách đồng nhất.[1]

Mục đích

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

Trong lập trình hướng đối tượng, một đối tượng hợp tử được tạo thành từ một hay nhiều đối tượng tương tự nhau (hoặc có một số chức năng tương tự nhau). Ý tưởng ở đây là có thể thao tác trên một nhóm đối tượng theo cách như thao tác trên một đối tượng duy nhất. Các đối tượng của nhóm phải có các thao tác chung, hay còn gọi là mẫu số chung nhỏ nhất.

Sử dụng khi nào

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

Khi sử dụng nhiều đối tượng theo cùng một cách, chúng thường có cùng mã lệnh. Ví dụ, khi sự khác nhau duy nhất giữa hai hàm chỉ là thao tác trên một đối tượng kiểu Hình vuông hoặc Hình tròn. Mẫu thiết kế này sẽ rất hữu ích khi sự khác nhau không cần phải tồn tại, Nó sẽ đơn giản hơn khi xét tập các đối tượng đồng nhất.

Cấu trúc

[sửa | sửa mã nguồn]
  • Component (thành phần)
    • khai báo giao diện cho thành phần đối tượng
    • thực thi thao tác mặc định
    • khai báo một giao diện cho phép truy cập đến các thành phần con
  • Leaf (Lá)
    • biểu diễn các đối tượng lá trong thành phần đối tượng
  • Composite (Hợp tử)
    • định nghĩa một thao tác cho các thành phần có thành phần con
    • lưu trữ thành phần con
    • thực thi sự quản lý các thành phần con của giao diện Component
  • Client (khách)
    • thao tác các đối tượng dựa trên giao diện Composite

Ví dụ sau minh hoạ ví dụ nêu ở trên với kết quả là:

(Europe:  (England: London)   (France: Paris))
import java.util.*;

interface Component {
   public String defaultMethod();
   public ArrayList<Component> getChildren();
   public boolean addComponent(Component c);
   public boolean removeComponent(Component c);
}

class Composite implements Component {
   private String id;
   private ArrayList<Component> components = new ArrayList<Component>();

   public Composite(String identification)         { id = identification; }

   public String defaultMethod() { 
       String s = " (" + id + ":"; 
       for (Component child: getChildren())
           s += " " + child.defaultMethod();
       return s + ") ";
   }

   public ArrayList<Component> getChildren()       { return components; }
   public boolean addComponent(Component c)        { return components.add(c); }
   public boolean removeComponent(Component c)     { return components.remove(c); }
}
   
class Leaf implements Component {
   private String id;

   public Leaf(String identification)              { id = identification; }

   public String defaultMethod()                   { return id; }
   public ArrayList<Component> getChildren()       { return null; }
   public boolean addComponent(Component c)        { return false; }
   public boolean removeComponent(Component c)     { return false; }
}

class CompositePattern {
   public static void main(String[] args) {
       Composite england = new Composite("England");
       Leaf york = new Leaf("York");
       Leaf london = new Leaf("London");
       england.addComponent(york);
       england.addComponent(london);
       england.removeComponent(york);

       Composite france = new Composite("France");
       france.addComponent(new Leaf("Paris"));

       Composite europe = new Composite("Europe");
       europe.addComponent(england);
       europe.addComponent(france);
        
       System.out.println(europe.defaultMethod());  
   }
}

Tham khảo

[sửa | sửa mã nguồn]
  1. ^ Gamma, Erich; Richard Helm; Ralph Johnson; John M. Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. tr. 395. ISBN 0-201-63361-2.
Chúng tôi bán
Bài viết liên quan
Giới thiệu AG Meredith - The nigh unkillable Octopus
Giới thiệu AG Meredith - The nigh unkillable Octopus
Meredith gần như bất tử trên chiến trường nhờ Bubble Form và rất khó bị hạ nếu không có những hero chuyên dụng
Công thức tính sát thương của Shenhe và Yunjin
Công thức tính sát thương của Shenhe và Yunjin
Shenhe và Yunjin có cơ chế gây sát thương theo flat DMG dựa trên stack cấp cho đồng đội, nên sát thương mà cả 2 gây ra lại phần lớn tính theo DMG bonus và crit của nhân vật khác
Sung Il-Hwan: Thợ Săn Hạng S Huyền Thoại và Hành Trình Bảo Vệ Gia Đình
Sung Il-Hwan: Thợ Săn Hạng S Huyền Thoại và Hành Trình Bảo Vệ Gia Đình
Sung Il-Hwan (성일환) là một Thợ săn hạng S người Hàn Quốc và là cha của Jinwoo và Jinah
Khám phá bên trong cửa hàng tiện lợi Speed L
Khám phá bên trong cửa hàng tiện lợi Speed L
Speed L là một chuỗi cửa hàng tiện lợi của siêu thị Lotte Mart – Hàn Quốc đã có mặt tại Thành phố Hồ Chí Minh. Lotte Mart cho ra mắt cửa hàng tiện lợi đầu tiên tại tòa nhà Pico Cộng Hòa, với các sản phẩm phục vụ nhu cầu tiêu dùng hàng ngày