java设计模式--结构型模式--组合模式

什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧。

组合模式:

  

 1                                                 组合模式
 2  概述
 3     将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对象的使用具有一致性。"
 4
 5
 6  适用性
 7     1.你想表示对象的部分-整体层次结构。
 8
 9     2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
10
11
12  参与者
13     1.Component
14       为组合中的对象声明接口。
15       在适当的情况下,实现所有类共有接口的缺省行为。
16       声明一个接口用于访问和管理Component的子组件。
17       (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
18
19     2.Leaf
20       在组合中表示叶节点对象,叶节点没有子节点。
21       在组合中定义节点对象的行为。
22
23     3.Composite
24       定义有子部件的那些部件的行为。
25       存储子部件。
26       在Component接口中实现与子部件有关的操作。
27
28     4.Client
29       通过Component接口操纵组合部件的对象。

测试类:

 1 import java.util.List;
 2
 3 public class Test {
 4     public static void main(String[] args) {
 5         Employer pm = new ProjectManager("项目经理");
 6         Employer pa = new ProjectAssistant("项目助理");
 7         //Employer programmer1 = new Programmer("程序员一");
 8         Employer programmer2 = new Programmer("程序员二");
 9
10         pm.add(pa);//为项目经理添加项目助理
11         pm.add(programmer2);//为项目经理添加程序员
12
13         List<Employer> ems = pm.getEmployers();
14         for (Employer em : ems) {
15             System.out.println(em.getName());
16         }
17     }
18 }
 1 import java.util.List;
 2
 3 public abstract class Employer {
 4
 5     private String name;
 6
 7     public void setName(String name) {
 8         this.name = name;
 9     }
10
11     public String getName() {
12         return this.name;
13     }
14
15     public abstract void add(Employer employer);
16
17     public abstract void delete(Employer employer);
18
19     public List<Employer> employers;
20
21     public void printInfo() {
22         System.out.println(name);
23     }
24
25     public List<Employer> getEmployers() {
26         return this.employers;
27     }
28 }
 1 import java.util.ArrayList;
 2
 3 public class ProjectManager extends Employer {
 4
 5     public ProjectManager(String name) {
 6         setName(name);
 7         employers = new ArrayList<Employer>();
 8     }
 9
10     public void add(Employer employer) {
11         employers.add(employer);
12     }
13
14     public void delete(Employer employer) {
15         employers.remove(employer);
16     }
17 }
 1 public class ProjectAssistant extends Employer {
 2
 3     public ProjectAssistant(String name) {
 4         setName(name);
 5         employers = null;//项目助理, 表示没有下属了
 6     }
 7
 8     public void add(Employer employer) {
 9
10     }
11
12     public void delete(Employer employer) {
13
14     }
15 }
 1 public class Programmer extends Employer {
 2
 3     public Programmer(String name) {
 4         setName(name);
 5         employers = null;//程序员, 表示没有下属了
 6     }
 7
 8     public void add(Employer employer) {
 9
10     }
11
12     public void delete(Employer employer) {
13
14     }
15 }

今天又学习了哈。。。

时间: 2024-10-07 06:29:09

java设计模式--结构型模式--组合模式的相关文章

设计模式(结构型)之组合模式(Composite Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之桥接模式(Bridge Pattern)> http://blog.csdn.net/yanbober/article/details/45366781 概述 组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像

设计模式(结构型)之外观模式(Facade Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之装饰者模式(Decorator Pattern)>http://blog.csdn.net/yanbober/article/details/45395747 概述 一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使

设计模式(结构型)之代理模式(Proxy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之享元模式(Flyweight Pattern)>http://blog.csdn.net/yanbober/article/details/45477551 概述 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个

java设计模式--结构型模式--享元模式

享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值. 参与者 1.Flyweight 描述一个接口,通过这个接口flywe

java设计模式--结构型模式--桥接模式

1 桥接模式 2 概述 3 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 4 5 6 适用性 7 1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 8 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换. 9 10 2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充. 11 这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充. 12 13 3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译.

java设计模式--结构型模式--装饰模式

1 装饰模式 2 概述 3 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 4 5 6 适用性 7 1.在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 8 9 2.处理那些可以撤消的职责. 10 11 3.当不能采用生成子类的方法进行扩充时. 12 参与者 13 1.Component 14 定义一个对象接口,可以给这些对象动态地添加职责. 15 16 2.ConcreteComponent 17 定义一个对象,可以给这个对象添

java设计模式--结构型模式--外观模式

1 外观模式 2 概述 3 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 4 5 6 适用性 7 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不断演化而变得越来越 8 复杂.大多数模式使用时都会产生更多更小的类.这使得子系统更具可重用性,也更容 9 易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难. 10 Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需

设计模式(结构型)之装饰者模式(Decorator Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之组合模式(Composite Pattern)>http://blog.csdn.net/yanbober/article/details/45392513 概述 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为.装饰模式是一种用于替代继承

设计模式(结构型)之享元模式(Flyweight Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之外观模式(Facade Pattern)>http://blog.csdn.net/yanbober/article/details/45476527 概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题.所以需要采用一