设计模式之组合模式

本文介绍了一种使用面向对象的方法来构建公司内部员工管理结构的设计方案。通过定义抽象基类“Employer”,并派生出“项目经理”、“项目助理”及“程序员”等具体角色类,实现了组织结构的灵活构建与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将对象组合成树形结构以表示”部分-整体”的层次结构

类图:这里写图片描述

实现:
雇员类:

public abstract class Employer {

    private String name;

    public List employers;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void add(Employer employer);

    public abstract void remove(Employer employer);

    public void printInfo() {
        System.out.println(name);
    }

    public List getEmployers() {
        return this.employers;
    }
}

项目经理类:

public class ProjectManager extends Employer {

    public ProjectManager(String name) {
        setName(name);
        employers = new ArrayList();
    }

    public void add(Employer employer) {
        employers.add(employer);
    }

    public void remove(Employer employer) {
        employers.remove(employer);
    }
}

项目助理类:

public class ProjectAssistant extends Employer {
    public ProjectAssistant(String name) {
        setName(name);
        employers = null;//项目助理, 表示没有下属了
    }

    public void add(Employer employer) {

    }

    public void remove(Employer employer) {

    }
}

小码农:

public class Programmer extends Employer {

    public Programmer(String name) {
        setName(name);
        employers = null;//程序员, 表示没有下属了
    }

    public void add(Employer employer) {

    }

    public void remove(Employer employer) {

    }
}

测试:将项目助理和两个码农挂到项目经理下:

 public static void main(String[] args) {
        Employer pm = new ProjectManager("项目经理");
        Employer pa = new ProjectAssistant("项目助理");
        Employer programmer1 = new Programmer("程序员一");
        Employer programmer2 = new Programmer("程序员二");

        pm.add(pa);//为项目经理添加项目助理
        pm.add(programmer1);//为项目经理添加程序员1
        pm.add(programmer2);//为项目经理添加程序员2

        List ems = pm.getEmployers();
        for(Object e:ems){
            System.out.println(((Employer)e).getName());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值