定义:
对象组合成部分整体结构,单个对象和组合对象具有一致性。
看了下大概结构就是集团总公司和子公司那种层级结构。
实现树状嵌套结构。
角色介绍:
Component :抽象根节点:其实相当去总公司,抽象子类共有的方法;
Composite :相当于总公司的智能部门,也分管子公司,通过集合存储子节点对象,提供增删获取子节点对象的方法;
leaf:子节点,相当于集团子公司,总公司具有的智能,子公司也具有,因此子节点具有总节点拥有的所有抽象方法以及提供给子类的方法。
Client:通过抽象跟节点操作子节点的对象。
public abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void doSomething(); }
import java.util.ArrayList; import java.util.List; /** * 具体枝干节点 * Created by Administrator on 2016/9/3. */ public class Composite extends Component { private List<Component> components = new ArrayList<>(); public Composite(String name) { super(name); } //新增子公司 public void addChild(Component component) { components.add(component); } //撤除子公司 public void remove(Component component) { components.remove(component); } //获取某个子公司对象信息 public void getChild(int index) { components.get(index); } @Override public void doSomething() { System.out.println(name); for (int i = 0; i < components.size(); i++) { components.get(i).doSomething(); } } }
public class Leaf extends Component { public Leaf(String name) { super(name); } //相当于输出子公司名称 @Override public void doSomething() { System.out.println(name); } }
运行结果:
public class Test { public static void main(String[] args) { Composite composite = new Composite("composite"); Composite composite1 = new Composite("composite1"); Composite composite2 = new Composite("composite1"); Leaf leaf = new Leaf("leaf1"); Leaf leaf2 = new Leaf("leaf2"); composite1.addChild(leaf); composite2.addChild(leaf2); composite.addChild(composite1); composite.addChild(composite2); composite.doSomething(); } }
实际项目中的使用:
- 比如对sd卡文件和文件夹的操作上其实就可以使用该设计模式:
- 定义一个抽象类表示文件和文件夹,包含对文件增加,删除,遍历的抽象方法;
- 文件夹类继承自1中的抽象类,并实现抽象类中的抽象方法;
- 文件类继承自1中的抽象类,并实现抽象类中的抽象方法;
android源码里面使用到组合模式就是View和ViewGroup的嵌套组合。
还是很粗糙,以后使用过程中慢慢体会吧