组合模式

设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

 1 package designPattern;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 
 5 /**
 6  * 组合模式
 7  * @author Administrator
 8  */
 9 public class B11_CompositeTest {
10 
11     /**
12      * 将对象组合成树形结构以表示部分-整体的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性
13      * 适用于:
14      * 1,你想表示对象的部分-整体结构
15      * 2,你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象.
16      */
17     public static void main(String[] args) {
18         Employer e=new ProjectManager("项目经理");
19         Employer e2=new ProjectAssistant("项目助理");
20         Employer e3=new Programmer("程序员");
21         e.add(e2);
22         e.add(e3);
23         List<Employer> empList=e.getEmployers();
24         for (int i = 0; i < empList.size(); i++) {
25             System.out.println(i+": "+empList.get(i).getName());
26         }
27     }
28 }
29 //1,Component  为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为。
30 //声明一个接口用于访问和管理Component的子组件。(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
31 abstract class Employer
32 {
33     private String name;
34 
35     public String getName() {
36         return name;
37     }
38     public void setName(String name) {
39         this.name = name;
40     }
41     public abstract void add(Employer e);
42     public abstract void delete(Employer e);
43     public List<Employer> employers;
44     public void printInfo() {
45         System.out.println(this.name);
46     }
47     public List<Employer> getEmployers()
48     {
49         return this.employers;
50     }
51 }
52 //2,leaf   在组合中表示叶节点对象,叶节点没有子节点。在组合中定义节点对象的行为。
53 class Programmer extends Employer
54 {
55     public Programmer(String name) {
56         setName(name);
57         employers=null;
58     }
59     public void add(Employer e) {
60         
61     }
62     public void delete(Employer e) {        
63         
64     }    
65 }
66 class ProjectAssistant extends Employer
67 {
68     public ProjectAssistant(String name) {
69         setName(name);
70         employers=null;
71     }
72     public void add(Employer e) {
73         
74     }
75     public void delete(Employer e) {        
76         
77     }    
78 }
79 //Composite 定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。
80 class ProjectManager extends Employer
81 {
82     public ProjectManager(String name) {
83         super();
84         setName(name);
85         employers=new ArrayList<Employer>();
86     }
87     public void add(Employer e) {
88         employers.add(e);        
89     }
90     public void delete(Employer e) {
91         employers.remove(e);        
92     }
93 }

 

环境:JDK1.6,MAVEN,tomcat,eclipse

源码地址:https://files.cnblogs.com/files/xiluhua/designPattern.rar

欢迎亲们评论指教。

posted @ 2015-04-10 10:02  xiluhua  阅读(192)  评论(0编辑  收藏  举报