股东会下面是董事会和监事,董事会下面是总经理,总经理下面是多个副总经理,副总经理下方对应不同的部门,用java代码描述这样的组合模式
时间: 2023-06-01 16:03:58 浏览: 24
public abstract class AbstractComponent {
protected String name;
public AbstractComponent(String name) {
this.name = name;
}
public abstract void add(AbstractComponent component);
public abstract void remove(AbstractComponent component);
public abstract void display(int depth);
}
public class ShareholdersMeeting extends AbstractComponent {
private List<AbstractComponent> children = new ArrayList<>();
public ShareholdersMeeting(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
children.add(component);
}
@Override
public void remove(AbstractComponent component) {
children.remove(component);
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
for (AbstractComponent component : children) {
component.display(depth + 2);
}
}
}
public class BoardOfDirectors extends AbstractComponent {
private List<AbstractComponent> children = new ArrayList<>();
public BoardOfDirectors(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
children.add(component);
}
@Override
public void remove(AbstractComponent component) {
children.remove(component);
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
for (AbstractComponent component : children) {
component.display(depth + 2);
}
}
}
public class Supervisor extends AbstractComponent {
private List<AbstractComponent> children = new ArrayList<>();
public Supervisor(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
children.add(component);
}
@Override
public void remove(AbstractComponent component) {
children.remove(component);
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
for (AbstractComponent component : children) {
component.display(depth + 2);
}
}
}
public class GeneralManager extends AbstractComponent {
private List<AbstractComponent> children = new ArrayList<>();
public GeneralManager(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
children.add(component);
}
@Override
public void remove(AbstractComponent component) {
children.remove(component);
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
for (AbstractComponent component : children) {
component.display(depth + 2);
}
}
}
public class ViceGeneralManager extends AbstractComponent {
private List<AbstractComponent> children = new ArrayList<>();
public ViceGeneralManager(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
children.add(component);
}
@Override
public void remove(AbstractComponent component) {
children.remove(component);
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
for (AbstractComponent component : children) {
component.display(depth + 2);
}
}
}
public class Department extends AbstractComponent {
public Department(String name) {
super(name);
}
@Override
public void add(AbstractComponent component) {
throw new UnsupportedOperationException();
}
@Override
public void remove(AbstractComponent component) {
throw new UnsupportedOperationException();
}
@Override
public void display(int depth) {
System.out.println(String.join("", Collections.nCopies(depth, "-")) + name);
}
}
// Usage
AbstractComponent shareholdersMeeting = new ShareholdersMeeting("Shareholders Meeting");
AbstractComponent boardOfDirectors = new BoardOfDirectors("Board of Directors");
AbstractComponent supervisor = new Supervisor("Supervisor");
AbstractComponent generalManager = new GeneralManager("General Manager");
AbstractComponent viceGeneralManager1 = new ViceGeneralManager("Vice General Manager 1");
AbstractComponent viceGeneralManager2 = new ViceGeneralManager("Vice General Manager 2");
AbstractComponent department1 = new Department("Department 1");
AbstractComponent department2 = new Department("Department 2");
shareholdersMeeting.add(boardOfDirectors);
boardOfDirectors.add(supervisor);
supervisor.add(generalManager);
generalManager.add(viceGeneralManager1);
generalManager.add(viceGeneralManager2);
viceGeneralManager1.add(department1);
viceGeneralManager2.add(department2);
shareholdersMeeting.display(0);