Java Composite Pattern(组合模式)

简介: 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

优点: 1、高层模块调用简单。 2、节点自由增加。
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

  1. 创建 Employee 类,该类带有 Employee 对象的列表。
/**
 * 1. 创建 Employee 类,该类带有 Employee 对象的列表。
 * @author mazaiting
 */
public class Employee {
    /**姓名*/
    private String name;
    /**职位*/
    private String dept;
    /**工资*/
    private int salary;
    private List<Employee> subordinates;
    public Employee(String name, String dept, int salary) {
        this.name = name;
        this.dept = dept;
        this.salary = salary;
        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;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", dept=" + dept + ", salary="
                + salary + "]";
    }
    
}
  1. 使用 Employee 类来创建和打印员工的层次结构。
/**
 * 2. 使用 Employee 类来创建和打印员工的层次结构。
 * @author mazaiting
 */
public class Client {
    public static void main(String[] args) {
        Employee CEO = new Employee("John", "CEO", 30000);

        Employee headSales = new Employee("Robert", "Head Sales", 20000);

        Employee headMarketing = new Employee("Michel", "Head Marketing", 20000);

        Employee clerk1 = new Employee("Laura", "Marketing", 10000);
        Employee clerk2 = new Employee("Bob", "Marketing", 10000);

        Employee salesExecutive1 = new Employee("Richard", "Sales", 10000);
        Employee salesExecutive2 = new Employee("Rob", "Sales", 10000);

        CEO.add(headSales);
        CEO.add(headMarketing);

        headSales.add(salesExecutive1);
        headSales.add(salesExecutive2);

        headMarketing.add(clerk1);
        headMarketing.add(clerk2);

        // 打印该组织的所有员工
        System.out.println(CEO);
        for (Employee headEmployee : CEO.getSubordinates()) {
            System.out.println(headEmployee);
            for (Employee employee : headEmployee.getSubordinates()) {
                System.out.println(employee);
            }
        }
    }
}

  1. 打印结果
Employee [name=John, dept=CEO, salary=30000]
Employee [name=Robert, dept=Head Sales, salary=20000]
Employee [name=Richard, dept=Sales, salary=10000]
Employee [name=Rob, dept=Sales, salary=10000]
Employee [name=Michel, dept=Head Marketing, salary=20000]
Employee [name=Laura, dept=Marketing, salary=10000]
Employee [name=Bob, dept=Marketing, salary=10000]
目录
相关文章
|
5天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
12 1
|
4月前
|
设计模式 Java
Java设计模式【九】:组合模式
Java设计模式【九】:组合模式
28 0
|
8月前
|
设计模式 Java 容器
组合模式【Java设计模式】
组合模式【Java设计模式】
25 0
|
4月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
31 0
|
4月前
|
Oracle 安全 Java
[Java] `JDK17` 模式变量 `Pattern variable` Variable ‘request‘ can be replaced with pattern variable
[Java] `JDK17` 模式变量 `Pattern variable` Variable ‘request‘ can be replaced with pattern variable
|
4月前
|
设计模式 Rust Java
组合模式 rust和java的实现
组合模式 rust和java的实现
59 0
|
9月前
|
设计模式 Java
【设计模式】用Java实现组合模式
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示"部分-整体"的层次结构。这种模式能够让客户端统一对待单个对象和组合对象,使得用户在使用对象时不需要关心对象是单个还是组合的。
86 0
|
6月前
|
设计模式 存储 Java
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
|
6月前
|
设计模式 Java 容器
【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)
41 0
【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)
|
7月前
|
Java
Java 组合模式讲解和代码示例
Java 组合模式讲解和代码示例
38 0