11.组合模式

package 组合模式;

import java.util.*;

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 HRDepartment extends Company{//人力资源部
 public HRDepartment(String name){
  super(name);
 }
 public  void Add(Company c){}
 
 public  void Remove(Company c){}
 
 public  void Display(int depth){//显示
  String strtemp=new String();
  for(int i=0;i<depth;i++){
   strtemp+="-";
  }
  System.out.println(strtemp+name);
 }
 
 public void Duty(){//人力资源部的职责
  System.out.println(name+"         员工招聘培训管理");
 }
 
}

 

class FNDepartment extends Company{//财务部
 public FNDepartment(String name){
  super(name);
 }
 public  void Add(Company c){}
 public  void Remove(Company c){}
 
 public  void Display(int depth){//显示
  String strtemp=new String();
  for(int i=0;i<depth;i++){
   strtemp+="-";
  }
  System.out.println(strtemp+name);
 }
 
 public void Duty(){//财政部的职责
  System.out.println(name+"         公司财务收支管理");
 }
 
}

 

class ConcreteCompany extends Company{//具体公司

  private List <Company> children=new ArrayList<Company>();//ArrayList集合类
 
  public ConcreteCompany(String name){
   super(name);
  }
 
  public void Add(Company c){//增加
   children.add(c);
  }
 
  public void Remove(Company c){//移除
   children.remove(c);
  }
 
  public void Display(int depth){//显示
   String strtemp=new String();
   for(int i=0;i<depth;i++){
    strtemp+="-";
   }
  System.out.println(strtemp+name);
  
  for(Company component:children){
   component.Display(depth+2);
  }
  
  }
 
  public void Duty(){//公司各个部分的职责
   for(Company componnet:children){
    componnet.Duty();
   }
  }
 }
public class TestClass {
 public static void main(String[] args){
 
  ConcreteCompany root=new  ConcreteCompany("北京总公司");
    
     root.Add(new HRDepartment("总公司人力资源部"));
     root.Add(new FNDepartment("总公司 财务部"));
 
    
     ConcreteCompany comp=new  ConcreteCompany("上海华东分公司");
        
        comp.Add(new HRDepartment("华东分公司人力资源部") );
        comp.Add(new FNDepartment("华东分公司财务部") );
 
        ConcreteCompany comp1=new  ConcreteCompany("南京办事处");
          comp1.Add(new HRDepartment("南京办事处人力资源部") );
          comp1.Add(new FNDepartment("南京办事处财务部") );
        comp.Add(comp1);
 
        ConcreteCompany comp2=new  ConcreteCompany("杭州处办事处");
          comp2.Add(new HRDepartment("杭州办事处人力资源部") );
          comp2.Add(new FNDepartment("杭州办事处财务部") );        comp.Add(comp2);
 
     root.Add(comp);
 
  System.out.println("/n结构图:");
 
  root.Display(1);//显示
 
 
 
  System.out.println("/n职责:");
 
  root.Duty();//履行职责
 
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值