java设计模式之组合模式

来源:互联网 发布:淘宝买家仅退款不退货 编辑:程序博客网 时间:2024/06/10 22:57

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

组合模式类图:
这里写图片描述
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节点:右子节点
0 0
原创粉丝点击