美文网首页
设计模式之组合模式

设计模式之组合模式

作者: 老羊_肖恩 | 来源:发表于2017-06-13 14:37 被阅读30次

组合模式的定义

组合模式(Composite Pattern)也叫合成模式,有时候也叫整体-部分模式,主要用来描述整体和部分之间的关系,其定义如下:
  Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. 即:将对象组合成树形结构以表示“部分-整体”的层次关系,是的用户对单个对象和组合对象的使用具有一致性。
组合模式的通用类图如下:

Component.jpg

组合模式的几个角色如下:

  • Component 抽象构建角色。定义参加组合对象的共有方法和属性。可以定义一些默认的行为或属性。
  • Leaf叶子构件。 叶子对象,其下再也没有其他的分之,也就是遍历的最小单位。
  • Composite 树枝构件。树枝对象,它的作用是组合树枝节点和叶子节点形成一个属性结构。

组合模式的通用代码如下:

import java.util.ArrayList;

//抽象构件
public abstract class Component{
    //部分和整体共享的业务逻辑
    public abstract void doSomething();
}

//整体构件
public class Composite extends Component{
    //构件容器
    private ArrayList<Component> leafsList = new ArrayList<Component>();
    
    //添加叶子构件或树枝构件
    public void add(Component component){
        System.out.println("add component...");
        this.leafsList.add(component);
    }
    
    //删除叶子节点或树枝构件
    public void remove(Component component){
        System.out.println("remove component...");
        this.leafsList.remove(component);
    }
    
    //获得分之下的所有叶子或树枝构件
    public ArrayList<Component> getChildren(){
        return this.leafsList;
    }
    
    //整体构件的业务逻辑
    @Override
    public void doSomething() {
        System.out.println("Composite doSomething...");
    }
    
}

//树叶构件
public class Leaf extends Component{

    @Override
    public void doSomething() {
        System.out.println("Leaf doSomething...");
    }
    
}

//客户端
public class ComponentClient{
    public static void main(String[] args) {
        Composite root = new Composite();
        root.doSomething();
        //创建一个树枝构件
        Composite branch = new Composite();
        Leaf leaf = new Leaf();
        
        branch.add(leaf);
        root.add(branch);
        
        display(root);
    }
    //通过递归遍历树
    public static void display(Composite root){
        for(Component c:root.getChildren()){
            if(c instanceof Leaf){
                c.doSomething();
            }else{
                display((Composite) c);
            }
        }
    }
}

代码运行结果如下:

Composite doSomething...
add component...
add component...
Leaf doSomething...

组合模式的应用

组合模式的优点

  • 高层模块调用简单。树形结构的所有节点都是Component,局部和整体对调用者来说没有任何区别。高层无需关心调用的是局部还是整体。
  • 节点自由度增加。使用了组合模式后,增加树枝节点或叶子节点都很容易,只要找到其父节点即可,非常简单,符合开闭原则,方便后期维护。

组合模式的缺点

  • 树枝和叶子节点直接使用了实现类,与依赖倒置原则冲突,用在面向接口编程上很不恰当。

组合模式使用场景

  • 维护和展示“部分-整体”关系的场景,如文件结构,树形结构等。
  • 从一个整体中能独立部分模块或功能的场景。

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记

相关文章

  • Android设计模式——组合模式(七大结构型)

    1.组合模式介绍 组合模式(Composite Pattern)也称为部分整体模式,是七大结构型设计模式之...

  • 组合模式

    设计模式之组合模式 什么是组合模式? 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以...

  • 组合模式

    设计模式系列7--组合模式 《Objective-c 编程之道 iOS 设计模式解析》 - 组合模式 常见组合模式...

  • 设计模式

    设计模式之组合模式 最新在工作之余,看了看这个设计模式,关于设计模式有很多种。最最常见的就是这个MVC模式或者...

  • Android 组合模式(View与ViewGroup)

    Android 设计模式系列文章 Android 23种设计模式 前言 组合设计模式,又被称为部分整体模式。组合模...

  • 设计模式之组合模式

    组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组...

  • 设计模式之组合模式

    1. 定义 组合模式,又叫部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用...

  • 设计模式之组合模式

    设计模式之组合模式 1.组合模式的定义 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组...

  • 设计模式之组合模式

    组合模式的定义 组合模式(Composite Pattern)也叫合成模式,有时候也叫整体-部分模式,主要用来描述...

  • 设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用...

网友评论

      本文标题:设计模式之组合模式

      本文链接:https://www.haomeiwen.com/subject/rqhafxtx.html