【每日一记】设计模式——组合模式

来源:互联网 发布:药店用的软件 编辑:程序博客网 时间:2024/05/01 16:29

概述

  • 定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
  • 适用场景:表示对象的部分-整体层次结构,同时希望用户忽略组合对象与单个对象的不同

实现

public abstract class Component {    protected String name;    public Component(String name) {        this.name = name;    }    public abstract void add(Component component);    public abstract void remove(Component component);    public abstract void foreach();}class Composite extends Component {    private List<Component> markets = new ArrayList<>();    public Composite(String name) {        super(name);    }    @Override    public void add(Component component) {        markets.add(component);    }    @Override    public void remove(Component component) {        markets.remove(component);    }    @Override    public void foreach() {        System.out.println(name);        for (Component m : markets) {            m.foreach();        }    }}class Leaf extends Component {    public Leaf(String name) {        super(name);    }    @Override    public void add(Component component) {    }    @Override    public void remove(Component component) {    }    @Override    public void foreach() {        System.out.println(name);    }}
// 客户端public class Client {    public static void main(String[] args) {        Component root = new Composite("root");        Component c1 = new Composite("composite 1");        Component c2 = new Leaf("leaf 1");        Component c3 = new Leaf("leaf 1-1");        root.add(c1);        root.add(c2);        market1.add(c3);        root.foreach();    }}

通过组合模式模糊了简单元素和复杂元素,使客户端对两者一视同仁,从而降低了客户端对于复杂元素内部结构的耦合

实际应用

org.w3c.dom.Node

类图

0 0
原创粉丝点击