package main;
/*组合模式
* 输出:
--总公司
------总公司人力资源部
------总公司财务部
------子公司
----------子公司的人力资源部
----------子公司的财务部
总公司人力资源部旅行人力资源部的责任
总公司财务部旅行财务部部的责任
子公司的人力资源部旅行人力资源部的责任
子公司的财务部旅行财务部部的责任
子公司旅行职责
总公司旅行职责
* */
import java.util.ArrayList;
abstract class company{
protected String name;
public company(String name) {
this.name=name;
}
public abstract void add(company c);
public abstract void remove(company c);
public abstract void display(int depth);
public abstract void duty();
}
class component extends company{
private ArrayList<company> children=new ArrayList<>();
public component(String name) {
super(name);
}
@Override
public void add(company c) {
children.add(c);
}
@Override
public void remove(company c) {
children.remove(c);
}
@Override
public void display(int depth) {
int de=depth;
while(de-->0) {
System.out.printf("--");
}
System.out.println(super.name);
for (company comp : children) {
comp.display(depth+2);
}
}
@Override
public void duty() {
for (company comp : children) {
comp.duty();
}
System.out.println(name+"旅行职责");
}
}
class resource extends component{
public resource(String name) {
super(name);
}
public void add(company c) {}
public void remove(company c) {}
public void display(int depth) {
while(depth-->0) {
System.out.printf("--");
}
System.out.println(super.name);
}
public void duty() {
System.out.println(name+"旅行人力资源部的责任");
}
}
class Finance extends component{
public Finance(String name) {
super(name);
}
public void add(company c) {}
public void remove(company c) {}
public void display(int depth) {
while(depth-->0) {
System.out.printf("--");
}
System.out.println(super.name);
}
public void duty() {
System.out.println(name+"旅行财务部部的责任");
}
}
public class Compose {
public static void main(String[] args) {
// TODO Auto-generated method stub
component root= new component("总公司");
root.add(new resource("总公司人力资源部"));
root.add(new Finance("总公司财务部"));
component suncompany=new component("子公司");
suncompany.add(new resource("子公司的人力资源部"));
suncompany.add(new Finance("子公司的财务部"));
root.add(suncompany);
root.display(1);
root.duty();
}
}