Composite pattern là gì

Trước tiên, họ hãy thuộc bboomersbar.com giới thiệu mọi thứ về Composite design Pattern cùng phần code ví dụ cụ thể nhằm góp ace dễ hiểu khi vận dụng trên các ngôn ngữ không giống nhau. Ace bao gồm thể tìm hiểu thêm các bài bác khác trên series design Pattern tại đây.

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

Mẫu tổng hợp(Composite pattern) là 1 trong những mẫu xây đắp phân vùng và bộc lộ một nhóm đối tượng được xử lý hệt như một thể hiện hiếm hoi của cùng một nhiều loại đối tượng. Mục tiêu của kết hợp là “biên soạn” các đối tượng người tiêu dùng thành cấu trúc cây để mô tả phân cấp 1 phần toàn bộ. Nó cho phép bạn có một cấu tạo cây cùng yêu cầu mỗi nút trong cấu tạo cây thực hiện một nhiệm vụ.

Theo diễn đạt của Gof, “Soạn các đối tượng người tiêu dùng thành cấu trúc cây để mô tả các cấu trúc phân cấp 1 phần toàn bộ . Composite cho phép khách hàng cách xử trí các đối tượng người tiêu dùng riêng lẻ và bố cục tổng quan của các đối tượng người dùng một cách đồng hóa ”.Khi xử lý dữ liệu có cấu tạo cây, những lập trình viên thường đề xuất phân biệt thân nút lá với nút nhánh. Điều này làm cho code phức tạp hơn và bởi vì đó, dễ xảy ra lỗi. Giải pháp là một giao diện được cho phép xử lý các đối tượng người sử dụng phức tạp với nguyên thủy một cách đồng nhất.Trong lập trình phía đối tượng, composite là 1 đối tượng được thiết kế với như một yếu tố của một hoặc nhiều đối tượng giống nhau, toàn bộ đều có tác dụng tương tự. Đây được call là mối quan hệ “có-một” giữa các đối tượng.Khái niệm chủ yếu là bạn có thể thao tác một diễn đạt duy duy nhất của đối tượng người tiêu dùng giống như thao tác với một tổ chúng. Các phép toán chúng ta cũng có thể thực hiện trên toàn bộ các đối tượng người sử dụng tổng thích hợp thường có mối quan hệ mẫu số chung bé dại nhất.Mô hình tổng hợp bao gồm bốn fan tham gia:Thành phần(Component) – yếu tố khai báo đồ họa cho các đối tượng trong thành phần cùng để truy vấn và làm chủ các thành phần bé của nó. Nó cũng thực hiện hành vi khoác định cho giao diện phổ biến cho toàn bộ các lớp nếu ham mê hợp.Lá(Leaf) – Lá xác định hành vi cho các đối tượng người dùng nguyên thủy trong thành phần. Nó đại diện thay mặt cho các đối tượng người tiêu dùng lá trong cha cục.Composite – Composite giữ trữ các thành phần nhỏ và thực hiện các vận động liên quan lại đến bé trong giao diện thành phần.Máy khách(Client) – vật dụng khách thao tác các đối tượng trong thành phần thông qua giao diện(interface) thành phần.Máy khách sử dụng giao diện(interface) lớp thành phần để can hệ với các đối tượng người tiêu dùng trong kết cấu thành phần. Nếu tín đồ nhận là 1 trong những lá thì yêu ước được cách xử lý trực tiếp. Nếu fan nhận là 1 trong tổ hợp, thì nó thường sự chuyển tiếp giữa yêu ước đến các thành phần bé của nó, rất có thể thực hiện những hoạt động bổ sung trước và sau khoản thời gian chuyển tiếp.

Xem thêm: Cổng Thông Tin Điện Tử Sở Công Thương Huế, Cổng Thông Tin Điện Tử Thành Phố Huế

Ví dụ về cuộc sống thựcTrong một nhóm chức, nó bao hàm người cai quản chung cùng dưới mọi người quản lý chung, có thể có đều người làm chủ và dưới mọi người làm chủ có thể có những người phát triển. Bây giờ bạn cũng có thể thiết lập một cấu trúc cây và yêu ước mỗi nút thực hiện làm việc chung như getSalary().Mẫu xây đắp tổng hợp giải pháp xử lý mỗi nút theo nhì cách:1) Kết hợp(Composite)Composite có tức là nó hoàn toàn có thể có các đối tượng người sử dụng khác dưới nó.2) lá(leaf) – lá có nghĩa là nó không có đối tượng dưới nó.

1. Cấu trúc cây:

*

Hình trên cho biết một kết cấu đối tượng Composite điển hình. Như các bạn thấy, tất cả thể có không ít con với một cha mẹ duy nhất có nghĩa là Composite, tuy vậy mỗi trẻ em chỉ bao gồm một phụ huynh.Interface Component.java

public interface Employee public void showEmployeeDetails(); Leaf.java


public class Developer implements Employee private String name; private long empId; private String position; public Developer(long empId, String name, String position) this.empId = empId; this.name = name; this.position = position;
Override public void showEmployeeDetails() System.out.println(empId+" " +name+); Leaf.java

public class Manager implements Employee private String name; private long empId; private String position; public Manager(long empId, String name, String position) this.empId = empId; this.name = name; this.position = position;
Override public void showEmployeeDetails() System.out.println(empId+" " +name); Composite.java

import java.util.ArrayList; import java.util.List; public class CompanyDirectory implements Employee private menu employeeList = new ArrayList();
Override public void showEmployeeDetails() for(Employee emp:employeeList) emp.showEmployeeDetails(); public void addEmployee(Employee emp) employeeList.add(emp); public void removeEmployee(Employee emp) employeeList.remove(emp); Client.java

public class Company public static void main (String<> args) Developer dev1 = new Developer(100, "Lokesh Sharma", "Pro Developer"); Developer dev2 = new Developer(101, "Vinay Sharma", "Developer"); CompanyDirectory engDirectory = new CompanyDirectory(); engDirectory.addEmployee(dev1); engDirectory.addEmployee(dev2); Manager man1 = new Manager(200, "Kushagra Garg", "SEO Manager"); Manager man2 = new Manager(201, "Vikram Sharma ", "Kushagra"s Manager"); CompanyDirectory accDirectory = new CompanyDirectory(); accDirectory.addEmployee(man1); accDirectory.addEmployee(man2); CompanyDirectory directory = new CompanyDirectory(); directory.addEmployee(engDirectory); directory.addEmployee(accDirectory); directory.showEmployeeDetails(); Sơ đồ dùng UML mang đến Mẫu thi công tổng hợp:

*

Code chạy đầy đủ cho ví dụ trên:


// A Java program khổng lồ demonstrate working of // Composite design Pattern with example // of a company with different // employee details import java.util.ArrayList; import java.util.List; // A common interface for all employee interface Employee public void showEmployeeDetails(); class Developer implements Employee private String name; private long empId; private String position; public Developer(long empId, String name, String position) // Assign the Employee id, // name và the position this.empId = empId; this.name = name; this.position = position;
Override public void showEmployeeDetails() System.out.println(empId+" " +name+ " " + position ); class Manager implements Employee private String name; private long empId; private String position; public Manager(long empId, String name, String position) this.empId = empId; this.name = name; this.position = position;
Override public void showEmployeeDetails() System.out.println(empId+" " +name+ " " + position ); // Class used to get Employee menu // & do the opertions like // add or remove Employee class CompanyDirectory implements Employee private danh sách employeeList = new ArrayList();
Override public void showEmployeeDetails() for(Employee emp:employeeList) emp.showEmployeeDetails(); public void addEmployee(Employee emp) employeeList.add(emp); public void removeEmployee(Employee emp) employeeList.remove(emp); // Driver class public class Company public static void main (String<> args) Developer dev1 = new Developer(100, "Lokesh Sharma", "Pro Developer"); Developer dev2 = new Developer(101, "Vinay Sharma", "Developer"); CompanyDirectory engDirectory = new CompanyDirectory(); engDirectory.addEmployee(dev1); engDirectory.addEmployee(dev2); Manager man1 = new Manager(200, "Kushagra Garg", "SEO Manager"); Manager man2 = new Manager(201, "Vikram Sharma ", "Kushagra"s Manager"); CompanyDirectory accDirectory = new CompanyDirectory(); accDirectory.addEmployee(man1); accDirectory.addEmployee(man2); CompanyDirectory directory = new CompanyDirectory(); directory.addEmployee(engDirectory); directory.addEmployee(accDirectory); directory.showEmployeeDetails(); Đầu ra:

100 Lokesh Sharma Pro Developer101 Vinay Sharma Developer200 Kushagra Garg SEO Manager201 Vikram Sharma Kushagra"s Manager

2. Bao giờ sử dụng Composite kiến thiết Pattern

Composite Pattern đề nghị được áp dụng khi quý khách hàng cần bỏ qua mất sự khác biệt giữa bố cục tổng quan của các đối tượng người dùng và các đối tượng người dùng riêng lẻ. Nếu những lập trình viên phân biệt rằng chúng ta đang thực hiện nhiều đối tượng người sử dụng theo cùng một phương pháp và thông thường có mã tương tự nhau để xử trí từng đối tượng trong số chúng, thì composite là một trong lựa lựa chọn tốt, trong trường đúng theo này sẽ ít phức hợp hơn ví như coi các vật liệu cội và vật liệu tổng hợp là đồng nhất.Số lượng đối tượng người tiêu dùng ít rộng làm sút mức sử dụng bộ nhớ và giúp họ tránh xa các lỗi liên quan đến bộ nhớ như java.lang.OutOfMemoryError .Mặc dù câu hỏi tạo một đối tượng người dùng trong Java thực sự vô cùng nhanh, họ vẫn hoàn toàn có thể giảm thời gian thực thi công tác của mình bằng phương pháp chia sẻ các đối tượng.

3. Khi làm sao không áp dụng Composite thiết kế Pattern?

Composite kiến thiết Pattern khiến cho việc hạn chế loại thành phần của tất cả hổn hợp khó hơn. Do vậy, nó không nên được sử dụng khi chúng ta không muốn màn trình diễn một hệ thống phân cấp khá đầy đủ hoặc một trong những phần của những đối tượng.Composite kiến thiết Pattern hoàn toàn có thể làm cho xây đắp trở yêu cầu quá chung chung. Câu hỏi hạn chế các thành phần của composite sẽ nặng nề hơn. Đôi khi bạn muốn một tổng hòa hợp chỉ có một số trong những thành phần nhất định. Cùng với Composite, các bạn không thể dựa vào type system để tiến hành những ràng buộc đó cho bạn. Cố kỉnh vào đó, bạn sẽ phải thực hiện kiểm tra thời hạn chạy.Cài vận dụng bboomersbar.com để dễ dàng dàng update tin và học thiết kế mọi lúc phần đa nơi tại đây.

Tài liệu từ bỏ bboomersbar.com:

Nếu chúng ta thấy hay với hữu ích, chúng ta có thể tham gia những kênh sau của bboomersbar.com nhằm nhận được không ít hơn nữa: