Composite pattern là gì

Trong bài viết này, chúng ta sẽ đi kiếm gọi về một mẫu mã xây cất hơi thú vị, chính là Composite pattern. Trong tiếng anh thì tự composite tức là làm cho một các thành phần hỗn hợp, Có nghĩa là một lắp thêm nào đấy được chế tạo ra từ rất nhiều yếu tố hỗn tạp.Đây là 1 chủng loại xây cất ở trong đội cấu trúc. Một đối tượng người sử dụng composite được tạo thành thành xuất phát điểm từ 1 giỏi những đối tượng tương tự nhau (hoặc gồm một trong những công dụng giống như nhau). Ý tưởng là có thể làm việc bên trên một đội đối tượng người sử dụng theo cách làm việc trên một đối tượng người dùng độc nhất với các đối tượng của group đề xuất tất cả các thao tác làm việc bình thường. (method chung).

Bạn đang xem: Composite pattern là gì

Như vậy tựa như nhỏng vấn đề chúng ta bao gồm một cấu tạo dạng cây được tạo thành thành từ khá nhiều nhánh khác biệt, mỗi nhánh lại có thể được chế tác từ khá nhiều nhánh khác, tất cả đông đảo tương đương nhau về khía cạnh cấu tạo và khiến cho một vật dụng lếu láo độn. Trong thực tiễn thì bọn họ gặp các bài xích toán thù phải sử dụng mang đến cấu trúc như thế nhỏng hệ thống những thư mục, tệp tin, hệ thống các thẻ tag trong html, xml,…

1. Composite Pattern là gì?

Nếu bạn quen thuộc cùng với kết cấu tài liệu dạng tree, các bạn sẽ biết một tree sẽ có được parents và children. Một parent hoàn toàn có thể có nhiều children, nhưng mà một chid chỉ gồm một parent. Trong mẫu mã kiến thiết Composite, đều element tất cả children được Hotline là Nodes, gần như element không tồn tại children được Gọi là Leafs.

Một mẫu mã xây cất Composite sẽ có 4 thành phần:

ComponentLeafCompositeClient

Hình tiếp sau đây biểu hiện kết cấu thường trông thấy của một đối Composite:

*

2. Sơ đồ gia dụng mẫu Composite UML

*
Trong biểu đồ vật bên trên thì:

Component (thành phần):Khai báo interface hoặc abtract tầm thường cho những yếu tắc đối tượng.Chứa hẹn các method làm việc thông thường của các thành phần đối tượng.Leaf (Lá):Biểu diễn các đối tượng người tiêu dùng lá vào yếu tắc đối tượng người tiêu dùng.Composite (lếu hợp):Định nghĩa một thao tác cho các yếu tắc tất cả yếu tố nhỏ.Lưu trữ những thành nhỏ.Thực thi sự làm chủ các thành phần bé của Component.Client:Điều khiển các đối tượng người dùng trong Composite trải qua những method trong Component.3. Ví dụ

Một file html là 1 cấu trúc phân cấp cho, bắt đầu từ bỏ thẻ tag cùng tiếp nối bao gồm nhiều các thẻ tag không giống có thể là parent hoặc child tag.Trong ví dụ này chúng ta sẽ thực hiện lớp component nlỗi là 1 trong lớp trừu tượng, trong số đó bao gồm các method quan trọng đặc biệt được dùng trong các composite và leaf.

Xem thêm: Hướng Dẫn Sao Kê Tài Khoản Ngân Hàng Bidv Năm 2021, 5 Cách Sao Kê Bảng Lương Bidv

public abstract class HtmlTag public abstract String getTagName(); public abstract void setStartTag(String tag); public abstract void setEndTag(String tag); public void setTagBody(String tagBody) throw new UnsupportedOperationException("Current operation is not support for this object"); public void addChildTag(HtmlTag htmlTag) throw new UnsupportedOperationException("Current operation is not support for this object"); public void removeChildTag(HtmlTag htmlTag) throw new UnsupportedOperationException("Current operation is not support for this object"); public List getChildren() throw new UnsupportedOperationException("Current operation is not support for this object"); public abstract void generateHtml(); Trong lớp HtmlTag thì những method được định nghĩa hầu như sẽ tiến hành sử dụng vì chưng các lớp composite cùng leaf. Có một vài ba method buộc phải được thực hiện rõ ràng vào cả từng class con, vày vậy yêu cầu bọn họ sẽ giữ lại được nó ngơi nghỉ dạng abtract vào lớp cha. lấy ví dụ như như getTagName().Một số method chỉ hữu ích vào composite tuy vậy lại ko mấy bao gồm chức năng trong leaf như removeChildTag(). Chúng ta vẫn để bọn chúng sinh hoạt dạng mặc định với hỗ trợ một nhiều loại Exception cho số đông object ko sử dụng chúng.

Bây giờ đồng hồ họ sẽ tạo một Composite class nhỏng sau:

public class HtmlParentElement extends HtmlTag private String tagName; private String startTag; private String endTag; private List childrenTag; public HtmlParentElement(String tagName) this.tagName = tagName; this.startTag = ""; this.endTag = ""; this.childrenTag = new ArrayList();
Override public void generateHtml() System.out.println(startTag); for (HtmlTag tag : childrenTag) tag.generateHtml(); System.out.println(endTag); HtmlParentElement là lớp composite và nó đề nghị implement các method nhỏng addChildTag, removeChildTag_, getChildren.

Xem thêm: Top 10 Shop Quần Jeans Nữ Đẹp Nhất Ở Tphcm, Top 5 Shop Bán Quần Jean Nữ Đẹp Nhất Ở Tphcm

public class HtmlElement extends HtmlTag private String tagName; private String startTag; private String endTag; private String tagBody; public HtmlElement(String tagName) this.tagName = tagName; this.tagBody = ""; this.startTag = ""; this.endTag = "";
Override public void generateHtml() System.out.println(startTag + "" + tagBody + "" + endTag); HtmlElement là lớp leaf với nó gồm trách nhiệm đó là implement các opearation method. Trong ví dụ này là generateHtml.

Cuối thuộc là chạy test:

public class TestCompositePattern { public static void main(String<> args) { HtmlTag parentTag = new HtmlParentElement(""); parentTag.setStartTag(""); parentTag.setEndTag(""); HtmlTag p1 = new HtmlParentElement(""); p1.setStartTag(""); p1.setEndTag("

Chuyên mục: Kiến thức