java设计模式之组合模式

组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

组合模式类图:
这里写图片描述
Client:客户使用Component接口操作组合中的对象。
Component:Component为组合中的所有对象定义一个接口,不管是组合还是节点,Component可以为add(),remove(),eachChild()实现一些默认的行为。
Leaf:叶节点没有孩子。叶节点通过实现Composite支持的操作,定义了组合内元素的行为。
Composite:Composite的角色是要定义组件的行为,而这样的组件具有子节点。

抽象类Component代码实现:

public abstract class Component {

    String name;
    public Component(String name){
        this.name = name;
    }
    public abstract void Add(Component component);
    public abstract void remove(Component component);
    public abstract void eachChild();
}

Leaf类代码实现:

public class Leaf extends Component{

    public Leaf(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void Add(Component component) {
        // TODO Auto-generated method stub

    }

    @Override
    public void remove(Component component) {
        // TODO Auto-generated method stub

    }

    @Override
    public void eachChild() {
        // TODO Auto-generated method stub
        System.out.println("叶节点:"+name);
    }

}

Composite类代码实现:

public class Composite extends Component{

    ArrayList<Component> list = new ArrayList<Component>();
    public Composite(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void Add(Component component) {
        // TODO Auto-generated method stub
        list.add(component);
    }

    @Override
    public void remove(Component component) {
        // TODO Auto-generated method stub
        list.remove(component);
    }

    @Override
    public void eachChild() {
        // TODO Auto-generated method stub
        System.out.println("节点:"+name);
        for(Component component : list){
            component.eachChild();
        }
    }

}

Client类代码实现:

public class Client {

    public static void main(String[] args){
        Component rootComposite = new Composite("根节点");
        Component leftComposite = new Composite("左子节点");
        Component rightComposite = new Composite("右子节点");

        Component leftleaf1 = new Leaf("左叶节点1");
        Component leftleaf2 = new Leaf("左叶节点2");

        leftComposite.Add(leftleaf1);
        leftComposite.Add(leftleaf2);

        rootComposite.Add(leftComposite);
        rootComposite.Add(rightComposite);

        rootComposite.eachChild();
    }
}

运行结果:

节点:根节点
节点:左子节点
叶节点:左叶节点1
叶节点:左叶节点2
节点:右子节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值