package com.eric.结构型模式.组合模式;
/**
* @author Eric
* @ProjectName my_design_23
* @description 抽象构件接口
* @CreateTime 2020-11-30 18:46:56
*/
public interface Component {
public void operation();
}
package com.eric.结构型模式.组合模式;
import java.util.ArrayList;
/**
* @author Eric
* @ProjectName my_design_23
* @description 树枝构件
* @CreateTime 2020-11-30 18:47:54
*/
public class Composite implements Component{
//构件容器
private ArrayList<Component> componentList = new ArrayList<Component>();
//添加构件
public void add(Component component){
this.componentList.add(component);
}
//删除构件
public void remove(Component component){
this.componentList.remove(component);
}
//获取子构件
public ArrayList<Component> getChild(){
return this.componentList;
}
@Override
public void operation() {
//业务逻辑代码
System.out.println("树枝执行自己的业务中...");
}
}
package com.eric.结构型模式.组合模式;
/**
* @author Eric
* @ProjectName my_design_23
* @description 叶子构件
* @CreateTime 2020-11-30 18:52:19
*/
public class Leaf implements Component {
@Override
public void operation() {
//业务逻辑代码
System.out.println("叶子执行自己的业务中...");
}
}
package com.eric.结构型模式.组合模式;
/**
* @author Eric
* @ProjectName my_design_23
* @description 测试类
* @CreateTime 2020-11-30 18:53:01
*/
public class Client {
public static void main(String[] args) {
//创建一个根节点
Composite root = new Composite();
root.operation();
//创建树枝结点
Composite branch = new Composite();
//创建叶子结点
Leaf leaf = new Leaf();
//构件树形结构
root.add(branch);
branch.add(leaf);
dispaly(root);
}
//遍历树(递归)
public static void dispaly(Composite root){
for (Component component : root.getChild()) {
//如果是叶子结点
if(component instanceof Leaf){
component.operation();
}else {
//树枝节点继续遍历
component.operation();
//递归调用
dispaly((Composite) component);
}
}
}
}
package com.eric.结构型模式.组合模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 抽象接口Company
* @CreateTime 2020-11-30 19:40:06
*/
public interface Company {
//获取信息
public String getInfo();
}
package com.eric.结构型模式.组合模式.例1;
import java.util.ArrayList;
/**
* @author Eric
* @ProjectName my_design_23
* @description 树枝节点类
* @CreateTime 2020-11-30 19:41:17
*/
public class ConcreteCompany implements Company {
private ArrayList<Company> companyList = new ArrayList<Company>();
private String name;//姓名
private String position;//职位
private int salary;//薪水
//构造函数
public ConcreteCompany(String name,String position,int salary){
this.name = name;
this.position = position;
this.salary = salary;
}
//添加
public void add(Company company){
this.companyList.add(company);
}
//删除
public void remove(Company company){
this.companyList.remove(company);
}
//获得所有子构件
public ArrayList<Company> getChild(){
return this.companyList;
}
@Override
public String getInfo() {
String info = "";
info = "名称:" + this.name;
info = info + "\t职位:" + this.position;
info = info + "\t薪水:" + this.salary;
return info;
}
}
package com.eric.结构型模式.组合模式.例1;
import java.util.ArrayList;
/**
* @author Eric
* @ProjectName my_design_23
* @description 叶子结点类
* @CreateTime 2020-11-30 19:51:03
*/
public class Employee implements Company {
private String name;//姓名
private String position;//职位
private int salary;//薪水
//构造函数
public Employee(String name,String position,int salary){
this.name = name;
this.position = position;
this.salary = salary;
}
@Override
public String getInfo() {
String info = "";
info = "名称:" + this.name;
info = info + "\t职位:" + this.position;
info = info + "\t薪水:" + this.salary;
return info;
}
}
package com.eric.结构型模式.组合模式.例1;
/**
* @author Eric
* @ProjectName my_design_23
* @description 应用代码
* @CreateTime 2020-11-30 19:53:18
*/
public class ClientDemo {
public static void main(String[] args) {
//CEO
ConcreteCompany root = new ConcreteCompany("Eric", "CEO", 100000000);
//部门经理
ConcreteCompany developDep = new ConcreteCompany("Error", "研发部经理", 700000);
ConcreteCompany saleDep = new ConcreteCompany("Erock", "销售部经理", 400000);
ConcreteCompany financeDep = new ConcreteCompany("zzzz", "财务部经理", 400000);
//部门员工
Employee e1 = new Employee("路人1", "研发部", 90000);
Employee e2 = new Employee("路人2", "研发部", 90000);
Employee e3 = new Employee("路人3", "研发部", 90000);
Employee e4 = new Employee("路人4", "研发部", 90000);
Employee e5 = new Employee("路人5", "研发部", 90000);
Employee e6 = new Employee("路人6", "研发部", 90000);
Employee e7 = new Employee("路人7", "销售部", 90000);
Employee e8 = new Employee("路人8", "销售部", 90000);
Employee e9 = new Employee("路人9", "财务部", 90000);
//生成树
root.add(developDep);
root.add(saleDep);
root.add(financeDep);
developDep.add(e1);
developDep.add(e2);
developDep.add(e3);
developDep.add(e4);
developDep.add(e5);
developDep.add(e6);
saleDep.add(e7);
saleDep.add(e8);
financeDep.add(e9);
//显示公司层次
System.out.println(root.getInfo());
dispaly(root);
}
//遍历树
public static void dispaly(ConcreteCompany root){
for (Company company : root.getChild()) {
if(company instanceof Employee){
System.out.println(company.getInfo());
}else{
System.out.println("\n"+company.getInfo());
dispaly((ConcreteCompany)company);
}
}
}
}
原文:https://www.cnblogs.com/zyl-0110/p/14204676.html