java设计模式--组合模式(9)

来源:互联网 发布:c语言中str 编辑:程序博客网 时间:2024/05/18 02:07

名称  :  Composite

 

结构:

 

 意图:

将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的使用具有一致性。

 

适用性:

  • 你想表示对象的部分-整体层次结构。
  • 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

实例:

 

Employee.java

package Composite_Pattern;import java.util.List;public abstract class Employer {        public  List  employers;            private String name;        public void setName(String name) {        this.name = name;    }        public String getName() {        return this.name;    }        public abstract void add(Employer employer);        public abstract void delete(Employer employer);               public void printInfo(){       System.out.println(name);    }            public   List  getEmployers() {        return   this.employers;    }}


Programmer.java

package Composite_Pattern;public class Programmer extends Employer{ public Programmer(String  name) {        setName(name);        employers = null;  //程序员, 表示没有下属了    }    public void add(Employer employer) {            }    public void delete(Employer employer) {            }}


ProjectAssistant.java

 

package Composite_Pattern;public class ProjectAssistant extends Employer{public   ProjectAssistant(String name) {        setName(name);        employers = null; //项目助理, 表示没有下属了    }@Overridepublic void add(Employer employer) {}@Overridepublic void delete(Employer employer) {}}


ProjectManager.java

package Composite_Pattern;import java.util.ArrayList;public class ProjectManager extends Employer {        public  ProjectManager(String name) {        setName(name);        employers = new  ArrayList();  //项目经理下面有一大帮人    }        public void add(Employer employer) {        employers.add(employer);    }      public void delete(Employer employer) {        employers.remove(employer);    }}


测试 Test.java

package Composite_Pattern;import java.util.List;public class Test { public static void main(String[] args) {          Employer pm = new ProjectManager("项目经理");             Employer pa = new ProjectAssistant("项目助理");             Employer programmer1 = new Programmer("程序员一");             Employer programmer2 = new Programmer("程序员二");                pm.add(pa);//为项目经理添加项目助理                pm.add(programmer2);//为项目经理添加程序员2                                   List<Employer>  ems = pm.getEmployers();                for (Employer em : ems) {                 em.printInfo();        }    }}


 

总结: 组合模式,这个用例是网上找的。