Java组合模式是一种常用的设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。它使得用户对单个对象和组合对象的使用具有一致性。
Java 组合模式的实例可以从文件夹和文件的例子中看出,文件夹可以包含文件夹和文件,而文件不能包含其它内容。因此,在 Java 中,可以使用 Composite 接口来表示文件夹和文件:
public interface Component { public void showProperty(); }
public class Folder implements Component { private String name; private List<Component> components = new ArrayList<Component>(); public Folder(String name) { this.name = name; } public void add(Component component) { components.add(component); } public void remove(Component component) { components.remove(component); } @Override // 实现 Component 接口中的方法 public void showProperty() { // 显示 Folder 的属性 System.out.println("Folder Name: " + name); // 显示 Folder 的名字 for (Component component : components) { // 遍历所有子元素 component.showProperty(); // 调用子元素的 showProperty() 方法 } } }
组合模式是结构型模式,因为它创建了一组对象的树结构。
组合模式将一组对象视为单个对象。
组合模式使用一个类来表示树结构。
在组合模式中,我们创建一个包含自己对象的类的组。
以下代码使用Employee类来演示组合模式。
import java.util.ArrayList; import java.util.List; class Employee { private String name; private String title; private List<Employee> subordinates; public Employee(String name,String title) { this.name = name; this.title = title; subordinates = new ArrayList<Employee>(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return "Employee :[ Name : "+ name +", dept : "+ title +subordinates +" ]"; } } public class Main { public static void main(String[] args) { Employee CEO = new Employee("John","CEO"); Employee headSales = new Employee("Rob","Sales"); Employee headMarketing = new Employee("Mike","Marketing"); Employee programmer1 = new Employee("Lili","Programmer"); Employee programmer2 = new Employee("Bob","Programmer"); Employee tester1 = new Employee("Jack","Tester"); Employee tester2 = new Employee("Tom","Tester"); CEO.add(headSales); CEO.add(headMarketing); headSales.add(tester1); headSales.add(tester2); headMarketing.add(programmer1); headMarketing.add(programmer2); //print all employees of the organization System.out.println(CEO); for (Employee headEmployee : CEO.getSubordinates()) { System.out.println(headEmployee); for (Employee employee : headEmployee.getSubordinates()) { System.out.println(employee); } } } }
上面的代码生成以下结果。
Java设计模式 - 单例模式单例模式是一种创建模式。这种模式只涉及一个单独的类,它负责创建自己的对象。该类确保只创建单个对象...
Java设计模式 - 数据访问对象模式数据访问对象模式或DAO模式将数据访问API与高级业务服务分离。DAO模式通常具有以下接口和类。数...
Java面向对象设计 -Java方法返回修饰符,返回类型和参数名称不是签名的一部分。方法的签名唯一地标识类中的方法。不允许在具有相...
Java面向对象设计 -Java final关键字final关键字不允许修改或替换其原始值或定义。final关键字可以在以下三个上下文中使用:变量...