组合模式笔记(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);

       ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值