设计模式 -- 组合模式 (Composite Pattern)

简介:   定义:   对象组合成部分整体结构,单个对象和组合对象具有一致性。    看了下大概结构就是集团总公司和子公司那种层级结构。   实现树状嵌套结构。   角色介绍:   Component :抽象根节点:其实相当去总公司,抽象子类共有的方法;   Composite :相当于总公司的智能部门,也分管子公司,通过集合存储子节点对象,提供增删获取子节点对象的方法;   leaf:子节点,相当于集团子公司,总公司具有的智能,子公司也具有,因此子节点具有总节点拥有的所有抽象方法以及提供给子类的方法。

   定义

  对象组合成部分整体结构,单个对象和组合对象具有一致性。

   看了下大概结构就是集团总公司和子公司那种层级结构。

  实现树状嵌套结构。

  角色介绍:

  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();
    }
}

 实际项目中的使用:

  1. 比如对sd卡文件和文件夹的操作上其实就可以使用该设计模式:
  2. 定义一个抽象类表示文件和文件夹,包含对文件增加,删除,遍历的抽象方法;
  3. 文件夹类继承自1中的抽象类,并实现抽象类中的抽象方法;
  4. 文件类继承自1中的抽象类,并实现抽象类中的抽象方法;

 android源码里面使用到组合模式就是View和ViewGroup的嵌套组合。

还是很粗糙,以后使用过程中慢慢体会吧

相关文章
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
3月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
39 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
3月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
31 1
|
3月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
39 0
|
4天前
|
设计模式 Java 容器
【设计模式系列笔记】组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示部分-整体的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合,而无需区分它们的类型。
38 12
|
11天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
13天前
|
设计模式 Java
小谈设计模式(20)—组合模式
小谈设计模式(20)—组合模式
|
1月前
|
设计模式 JavaScript uml
设计模式之组合模式
设计模式之组合模式
设计模式之组合模式
|
1月前
|
设计模式 存储 安全
【设计模式】组合模式
【设计模式】组合模式
|
2月前
|
设计模式 Java
浅谈设计模式 - 组合模式(十二)
浅谈设计模式 - 组合模式(十二)
51 0