代码
package com.hao.demo.design.composite;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author haoxiansheng
* @date 2020-05-19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public abstract class OrganizationComponent {
private String name; //名称
private String desc; // 说明
protected void add(OrganizationComponent organizationComponent) {
throw new UnsupportedOperationException();
}
protected void remove(OrganizationComponent organizationComponent) {
throw new UnsupportedOperationException();
}
// print
protected abstract void print();
}
package com.hao.demo.design.composite;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date 2020-05-19
*/
// composite 角色 可以管理college
public class University extends OrganizationComponent {
List<OrganizationComponent> organizationComponents = new ArrayList<>();
public University(String name, String desc) {
super(name, desc);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDesc() {
return super.getDesc();
}
// 输出University 包含的学院
@Override
protected void print() {
System.out.println("=======" + getName() + "========");
// 遍历输出OrganizationComponent
organizationComponents.forEach(OrganizationComponent::print);
}
}
package com.hao.demo.design.composite;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @date 2020-05-19
*/
public class College extends OrganizationComponent{
// List中存放的Department
List<OrganizationComponent> organizationComponents = new ArrayList<>();
public College(String name, String desc) {
super(name, desc);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDesc() {
return super.getDesc();
}
// 输出University 包含的学院
@Override
protected void print() {
System.out.println("=======" + getName() + "========");
// 遍历输出OrganizationComponent
organizationComponents.forEach(OrganizationComponent::print);
}
}
package com.hao.demo.design.composite;
/**
* @author
* @date 2020-05-19
*/
public class Department extends OrganizationComponent {
public Department(String name, String desc) {
super(name, desc);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDesc() {
return super.getDesc();
}
@Override
protected void print() {
System.out.println("" + getName() + "");
}
}
// 测试类
package com.hao.demo.design.composite;
/**
* @author
* @date 2020-05-19
*/
public class Cilent {
public static void main(String[] args) {
// 测试
OrganizationComponent university = new University("清华大学", "中国最好的大学");
OrganizationComponent computerCollege = new College("计算机学院", "赚钱");
OrganizationComponent infoEngineerCollege = new College("信息工程学院", "赚钱");
// 专业
computerCollege.add(new Department("软件工程", "很好"));
computerCollege.add(new Department("网络工程", "很好"));
computerCollege.add(new Department("计算机科学与技术", "很好"));
infoEngineerCollege.add(new Department("通信工程", "很好"));
infoEngineerCollege.add(new Department("信息工程", "很好"));
university.add(computerCollege);
university.add(infoEngineerCollege);
university.print();
}
}