组合模式笔记(Java)

组合模式:是结构型模式中的对象结构型模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式对单个对象的使用和组合对象的使用具有一致性。

组合模式的参与者:抽象构件类(Component),叶子构件类(leaf),树枝构件类(Composite),客户类(Client)

抽象构件类(Component):为组合中的对象声明接口,给出了共有的接口及默认行为。

叶子构件类(leaf):在组合对象中表示叶节点对象,叶节点没有子节点。

树枝构件类(Composite):表示组合对象中有子节点对象的对象。并给出了树枝构件对象的行为。

客户类(Client):通过Component操作组合部件的对象。

用户使用Component类接口与组合结构中的对象进行交互,如果接受者是一个叶节点,则直接出来请求,如果接收的是Composite,它通常将请求发给它的子部件,在转发请求之前或之后可能执行一些辅助操作。

合成模式可以不提供对父对象的管理,但是必须在合适的地方提供对子对象的管理方法。

合成模式根据所实现接口的区别分为二种形式,分别称为安全式和透明式。

透明式:在Component接口内声明所有的用来管理子类对象的方法。这样做的好处是所有构件类都有相同的接口。在客户端看来,叶节点对象和组合对象在接口层次上是没有区别的。客户端可以同等的对待所有的对象。透明式是不安全的,因为叶节点是没有子节点的,也就没有对子对象的管理方法的。

Component类:

public interface Component{

public Composite getCompesite();

public void sampleOperation();

//一些管理子对象的方法

}

Composite类:

Leaf类:

public class Leafimplements Component{

public Composite getCompesite(){

//返回自己的代码

}

public void sampleOperation(){

//商业方法

}

public class Composite implements Component{

public Composite getCompesite(){

//返回自己的代码

}

public void sampleOperation(){

//商业方法

}

//一些管理子对象的方法

public void add(Component component){

//相应代码

}

……

}

//一些管理子对象的方法

}

安全式:在Composite内声明了所有用来管理子对象的方法。这样的做法是安全的做法。缺点是不够透明,这样叶节点和合成类具有不同的接口。

Component类:

public interface Component{

public Composite getCompesite();

public void sampleOperation();

}

Composite类:

public class Composite implements Component{

public Composite getCompesite(){

//返回自己的代码

}

public void sampleOperation(){

//商业方法

}

//一些管理子对象的方法

public void add(Component component){

//相应代码

}

……

}

Leaf类:

public class Leafimplements Component{

public Composite getCompesite(){

//返回自己的代码

}

public void sampleOperation(){

//商业方法

}

}

以下情况使用组合模式:

(1)你想表示对象的部分-整体层次结构。

(2)你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象。

public void add(Component component){

//相应代码

}

……

public void add(Component component);

……

细数门前落叶,倾听窗外雨声,

组合模式笔记(Java)

相关文章:

你感兴趣的文章:

标签云: