java设计模式之组合模式

参考:http://blog.csdn.net/jason0539/article/details/22642281

  • 先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。”
    使用条件:一种行为/动作在一个地方做出,其它地方都会有同样的动作。如会员卡积分。在分店、加盟店、总店积分是相同的。
  • 设计:一个超类定义刷卡等方法,一个组合类(总店和分店组合,有list<>集合)继承超类并且在要求的“动作/行为”中,做list循环为list(所有)中类递归调用,不知道这属不属于递归,,一个叶子类继承超类,

“`
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
import java.util.ArrayList;
import java.util.List;

public class ComponentDemo {
public abstract class Component {
String name;

    public abstract void add(Component c);  

    public abstract void remove(Component c);  

    public abstract void eachChild();  
}  

// 组合部件类  
public class Leaf extends Component {  

    // 叶子节点不具备添加的能力,所以不实现  
    @Override  
    public void add(Component c) {  
        // TODO Auto-generated method stub  
        System.out.println("");  
    }  

    // 叶子节点不具备添加的能力必然也不能删除  
    @Override  
    public void remove(Component c) {  
        // TODO Auto-generated method stub  
        System.out.println("");  
    }  

    // 叶子节点没有子节点所以显示自己的执行结果  
    @Override  
    public void eachChild() {  
        // TODO Auto-generated method stub  
        System.out.println(name + "执行了");  
    }  

}  

// 组合类  
public class Composite extends Component {  

    // 用来保存节点的子节点  
    List<Component> list = new ArrayList<Component>();  

    // 添加节点 添加部件  
    @Override  
    public void add(Component c) {  
        // TODO Auto-generated method stub  
        list.add(c);  
    }  

    // 删除节点 删除部件  
    @Override  
    public void remove(Component c) {  
        // TODO Auto-generated method stub  
        list.remove(c);  
    }  

    // 遍历子节点  
    @Override  
    public void eachChild() {  
        // TODO Auto-generated method stub  
        System.out.println(name + "执行了");  
        for (Component c : list) {  
            c.eachChild();  
        }  
    }  
}  

public static void main(String[] args) {  
    ComponentDemo demo = new ComponentDemo();  
    // 构造根节点  
    Composite rootComposite = demo.new Composite();  
    rootComposite.name = "根节点";  

    // 左节点  
    Composite compositeLeft = demo.new Composite();  
    compositeLeft.name = "左节点";  

    // 构建右节点,添加两个叶子几点,也就是子部件  
    Composite compositeRight = demo.new Composite();  
    compositeRight.name = "右节点";  
    **Leaf leaf1** = demo.new Leaf();  
    leaf1.name = "右-子节点1";  
    **Leaf leaf2** = demo.new Leaf();  
    leaf2.name = "右-子节点2";  
    compositeRight.add(leaf1);  
    compositeRight.add(leaf2);  

    // 左右节点加入 根节点  
    rootComposite.add(compositeRight);  
    rootComposite.add(compositeLeft);  
    // 遍历组合部件  
    rootComposite.eachChild();  
}  

}
“`这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值