组合模式,以大学各级机构为例

public interface Company {
    int calculateSalary();
}
public class University implements Company {
    private int id;
    private int salary;
private Organization rootOrg;
    public University(int id) {
        this.id = id;
        this.salary = 0;
    }

    public void addCompany(Organization rootOrg){
        this.rootOrg=rootOrg;
    }

    public int calculateSalary() {
        return rootOrg.calculateSalary();
    }
}

public class Organization implements Company {

    private int id;
    private Organization parent;
    private List<Company> companies;
    private int salary;

    public Organization(int id, Organization parent) {
        this.id = id;
        this.parent = parent;
        this.companies = new ArrayList<>();
        this.salary = 0;
    }

    public void addCompany(Company company) {
        companies.add(company);
        if (company instanceof Organization) {
            ((Organization) company).setParent(this);
        }
    }

    public void removeCompany(Company company) {
        companies.remove(company);
    }

    public void setParent(Organization parent) {
        this.parent = parent;
    }

    @Override
    public int calculateSalary() {
        salary=0;
        for (Company company : companies) {
            salary =salary+ company.calculateSalary();
        }
        return salary;
    }


}
public class Teacher implements Company{

    private String id;
    private int orgId;
    private int salary;

    public Teacher(String id,int orgId,int salary){
        this.id=id;
        this.orgId=orgId;
        this.salary=salary;
    }

    @Override
    public int calculateSalary() {
        return salary;
    }

}

public class Main {

    public static void main(String[] args) {
        // 创建学校对象
        University university = new University(0);

        // 创建机构对象
        Organization rootOrg = new Organization(1, null);
        Organization subOrg1 = new Organization(2, null);
        Organization subOrg2 = new Organization(3, null);
        Organization subOrg3 = new Organization(4, null);

        // 添加机构到学校
        university.addCompany(rootOrg);

        // 添加子机构到根机构
        rootOrg.addCompany(subOrg1);
        subOrg1.addCompany(subOrg2);
        subOrg1.addCompany(subOrg3);

        // 创建教职工对象
        Teacher teacher1 = new Teacher("B001", 1, 4000);
        Teacher teacher2 = new Teacher("B002", 2, 5000);
        Teacher teacher3 = new Teacher("B003", 2, 7000);
        Teacher teacher4 = new Teacher("B004", 3, 6000);
        Teacher teacher5 = new Teacher("B005", 4, 8000);

        // 添加教职工到机构
        rootOrg.addCompany(teacher1);
        subOrg1.addCompany(teacher2);
        subOrg1.addCompany(teacher3);
        subOrg2.addCompany(teacher4);
        subOrg3.addCompany(teacher5);

        // 计算每个机构下所有教职员工的薪资综合
        System.out.println("根机构薪资总和:" + university.calculateSalary());
        System.out.println("子机构1薪资总和:" + rootOrg.calculateSalary());
        System.out.println("子机构2薪资总和:" + subOrg1.calculateSalary());
        System.out.println("子机构3薪资总和:" + subOrg2.calculateSalary());
        System.out.println("子机构4薪资总和:" + subOrg3.calculateSalary());
    }
}

好的,以下是回复: 这个教育机构的OA系统可以通过组合模式来设计组织结构,并且可以给各级办公室下发公文。我们可以绘制一个类图来表示这个系统的组织结构,然后编写代码来模拟实现这个系统。 在这个系统中,我们可以使用组合模式来表示组织结构。我们可以定义一个抽象的组织结构类,然后派生出具体的部门和员工类。部门类可以包含其他部门和员工,而员工类则是叶子节点,不包含其他部门或员工。 在客户端代码中,我们可以模拟下发公文的过程。首先,我们需要获取要下发的公文内容,然后选择要下发的部门或员工。如果选择的是部门,那么公文将会被下发给该部门下的所有员工;如果选择的是员工,那么公文将会被直接下发给该员工。 下面是一个简单的类图,用于表示这个教育机构的OA系统的组织结构: ![组织结构类图](https://i.imgur.com/1jQJQ2q.png) 在这个类图中,我们定义了一个抽象的组织结构类,它包含了一些基本的属性和方法。我们还定义了具体的部门和员工类,它们都继承自组织结构类。部门类包含了一个部门列表和一个员工列表,而员工类则只包含了一些基本的属性。 下面是一个简单的代码示例,用于模拟下发公文的过程: ```python class Organization: def __init__(self, name): self.name = name def add(self, org): pass def remove(self, org): pass def send_document(self, document): pass class Department(Organization): def __init__(self, name): super().__init__(name) self.departments = [] self.employees = [] def add(self, org): if isinstance(org, Department): self.departments.append(org) elif isinstance(org, Employee): self.employees.append(org) def remove(self, org): if isinstance(org, Department): self.departments.remove(org) elif isinstance(org, Employee): self.employees.remove(org) def send_document(self, document): for employee in self.employees: employee.receive_document(document) for department in self.departments: department.send_document(document) class Employee(Organization): def __init__(self, name, position): super().__init__(name) self.position = position def receive_document(self, document): print(f"{self.name} ({self.position}) received document: {document}") def send_document(self, document): print(f"{self.name} ({self.position}) cannot send document directly") # 创建部门和员工 root = Department("Root") it_department = Department("IT Department") hr_department = Department("HR Department") finance_department = Department("Finance Department") root.add(it_department) root.add(hr_department) root.add(finance_department) it_employee1 = Employee("John", "Programmer") it_employee2 = Employee("Mary", "Designer") hr_employee1 = Employee("Tom", "HR Manager") hr_employee2 = Employee("Jane", "HR Assistant") finance_employee1 = Employee("David", "Accountant") finance_employee2 = Employee("Lisa", "Financial Analyst") it_department.add(it_employee1) it_department.add(it_employee2) hr_department.add(hr_employee1) hr_department.add(hr_employee2) finance_department.add(finance_employee1) finance_department.add(finance_employee2) # 模拟下发公文 document = "Important document" root.send_document(document) ``` 在这个示例中,我们创建了一个根部门和三个子部门,每个子部门都包含了一些员工。然后,我们模拟了下发公文的过程,将公文下发给了整个组织结构。在这个过程中,每个员工都会收到公文。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值