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

来源:互联网 发布:淘宝功能中心 编辑:程序博客网 时间:2024/06/15 12:34

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        举例

比较

原创粉丝点击