设计模式学习与实践(十)----合成模式(composite)

1.1.1        描述

l         正规描述

合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待

l         形象描述

MM今天过生日。我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”“……”MM都会用Composite模式了,你会了没有?

1.1.2        类图&示意代码

形式1:安全模式

public interface Component(){

Composite getComposite();

Operation1();

}

 

public class Composite implements Component(){

public Composite getComposite(){

    return this;

}

 

public void Operation1(){

    //to do

}

 

public void childComponentManageMethod(){//eg add(),remove()…

    //to do manage child component

}

}

 

public class Leaf implements Component(){

public Composite getComposite(){

    return null;

}

 

public void Operation1(){

    //to do

}

}

 

public class Client(){

public void main(String args[]){

    Component leaf = new Leaf();

    leaf.Operation1();

    Composite composite = new Composite();

    composite.Operation1();

    composite.childComponentManageMethod();

}

}

注:

      

形式2:透明模式

 

public interface Component(){

Operation1();

Enumeration getChildComponents();

childComponentManageMethod();

boolean isComposite();

boolean isLeaf();

}

 

public class Composite implements Component(){

Enumeration childComponents = new Enumeration();

 

public void Operation1(){

    //to do

}

 

public Enumeration getChildComponents(){

    return childComponents;

}

 

public void childComponentManageMethod(){//例如:add(),remove()

    //to do

}

 

public boolean isLeaf(){

    return false;

}

 

public Boolean isComposite(){

    return true;

}

}

 

public class Leaf implements Component(){

public void Operation1(){

    //to do

}

 

public Enumeration getChildComponents(){

    return null;

}

 

public void childComponentManageMethod(){

    //to do

}

 

public boolean isLeaf(){

    return true;

}

 

public Boolean isComposite(){

    return false;

}

}

 

public class Client(){

public void main(String args[]){

    Component leaf = new Leaf();

        leaf.Operation1();

        Component composite = new Composite();

        if(composite.isComposite()){

            composite.childComponentManageMethod();

        }

}

}

注:

       1

1.1.3        举例

比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值