设计模式(组合模式)

组合模式是为了解决业务中“局部-整体”的关系,这里的局部整体互相嵌套,且具备相同的处理接口。

典型的角色是两个:

  • component:包含自身抽象列表的类,下例中为Employee;
  • composite:各个组成部分对外暴露的处理接口,下例中为toString,为单独抽象;

代码如下:

  • Employee
复制代码
package com.example;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Employee {

    private String name;
    private String deptname;
    private List<Employee> subs;
    
    public Employee(String name, String deptname){
        this.name = name;
        this.deptname = deptname;
        subs = new ArrayList<Employee>();        
    }

    public void add(Employee e) {
        subs.add(e);
    }

    public void remove(Employee e) {
        for (Iterator<Employee> it = subs.iterator(); it.hasNext();) {
            if (((Employee) it.next()).name == e.name) {
                it.remove();
            }
        }
    }
    
    //这里的toString,等价于于composite方法
    public String toString() {
        return ("Employee :[ Name : " + name + ", dept : " + deptname + " ]");
    }

    public List<Employee> getSubs() {
        return subs;
    }

}
复制代码
  • App 测试类
复制代码
public class App {

    public static void main(String[] args) {
        Employee e1 = new Employee("fredric", "dept1");
        Employee e2 = new Employee("sinny", "dept2");
        Employee e3 = new Employee("baobao", "dept2");
        e1.add(e2);
        e1.add(e3);
        for(Employee emp:e1.getSubs()){
            System.out.println(emp);
        }
        e1.remove(e2);
        for(Employee emp:e1.getSubs()){
            System.out.println(emp);
        }        
    }
}
复制代码
posted @   Fredric_2013  阅读(212)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2014-06-12 《企业虚拟化应用实战》笔记
点击右上角即可分享
微信分享提示