设计模式之组合模式

来源:互联网 发布:如何开个淘宝网店 编辑:程序博客网 时间:2024/05/05 05:22

        组合模式:将对象组合成属性结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

        目录结构、总公司分公司这样的结构最适合采用组合模式来实现。

        组合模式可分为:

        抽象构建角色:定义了所有参与组合对象的统一接口;

        树枝构建角色:拥有子对象的对象,定义了树枝构建对象的统一行为;

        树叶构建角色:最末端的对象,不拥有子对象;

        现在用类似目录结构的层级结构来举例。

Component抽象构建角色:

public abstract class Component {public String name;public Component(String name) {super();this.name = name;}public abstract void add(Component c);public abstract void remove(Component c);public abstract void display(int deepth);public void desperate(int deepth) {for(int i = 0; i < deepth; i++) {System.out.print("-");}System.out.println(this.name);}}
树枝构建对象:

public class Composite extends Component {public Composite(String name) {super(name);}public List<Component> lists = new ArrayList<Component>();@Overridepublic void add(Component c) {lists.add(c);}@Overridepublic void remove(Component c) {lists.remove(c);}@Overridepublic void display(int deepth) {desperate(deepth);for(Component c : lists) {c.display(deepth + 2);}}}
树叶构建角色:

public class Leaf extends Component {public Leaf(String name) {super(name);}@Overridepublic void add(Component c) {}@Overridepublic void remove(Component c) {}@Overridepublic void display(int deepth) {desperate(deepth);}}
组建结构:

public static void main(String[] args) {Component root = new Composite("root");Component lv1 = new Composite("lv1");Component lv2 = new Composite("lv2");Component lv3 = new Composite("lv3");Component lv4 = new Composite("lv4");root.add(lv1);root.add(lv2);root.add(lv3);root.add(lv4);Component lv11 = new Leaf("lv11"); Component lv12 = new Leaf("lv12"); Component lv21 = new Leaf("lv21"); Component lv31 = new Leaf("lv31"); Component lv32 = new Leaf("lv32"); Component lv41 = new Leaf("lv41");lv1.add(lv11);lv1.add(lv12);lv2.add(lv21);lv3.add(lv31);lv3.add(lv32);lv4.add(lv41);root.display(2);}
结果:

--root

----lv1

------lv11

------lv12

----lv2

------lv21

----lv3

------lv31

------lv32

----lv4

------lv41


        组合模式还分为安全方式和透明方式,上述示例为透明方式,即树叶角色和树枝角色具有Component定义的统一接口,但不具备add和remove的功能。安全方式是在抽象构建角色中不声明add和remove方法,树叶构建角色也不实现add和remove方法,这样就需要在客户端调用的时候做判断。

0 0
原创粉丝点击