zoukankan      html  css  js  c++  java
  • 组合模式(Composite)

    1、概念

    组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性,属于结构性模式。
    组合模式

    2、模式结构

    • Component:组合中的对象声明接口,实现所有类共有接口的默认行为,声明一个接口用于访问和管理Component子部件
    • Leaf:叶子对象,叶子结点没有子结点
    • Composite:容器对象,定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作

    3、使用场景

    • 表示对象的部分-整体层次结构
    • 让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节

    4、优缺点

    优点:

    • 可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,使得增加新构件也更容易
    • 客户端调用简单,客户端可以一致的使用组合结构或其中单个对象
    • 更容易在组合体内加入对象构件,客户端不必因为加入了新的对象构件而更改原有代码

    缺点:

    • 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则
    • 使设计变得更加抽象

    5、实例

    public abstract class File {
        private String name;
    
        public File(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public abstract void display();
    }
    
    public class Folder extends File {
    
        private List<File> files;
    
        public Folder(String name) {
            super(name);
            files = new ArrayList<>();
        }
    
        @Override
        public void display() {
            for (File file : files) {
                file.display();
            }
        }
    
        public void add(File file) {
            files.add(file);
        }
    
        public void remove(File file){
            files.remove(file);
        }
    }
    
    public class ImageFile extends File {
    
        public ImageFile(String name) {
            super(name);
        }
    
        @Override
        public void display() {
            // image的业务逻辑
        }
    }
    
    public class TextFile extends File {
    
        public TextFile(String name) {
            super(name);
        }
    
        @Override
        public void display() {
            // text的业务逻辑
        }
    }
    
  • 相关阅读:
    CodeForces 797D Broken BST
    CodeForces 797C Minimal string
    CodeForces 797B Odd sum
    CodeForces 797A k-Factorization
    CodeForces 772B Volatile Kite
    OpenCV学习笔记二十:opencv_ts模块
    OpenCV学习笔记十九:opencv_gpu*模块
    OpenCV学习笔记十八:opencv_flann模块
    OpenCV学习笔记十七:opencv_bioinspired模块
    OpenCV学习笔记十六:opencv_calib3d模块
  • 原文地址:https://www.cnblogs.com/fomin/p/9945302.html
Copyright © 2011-2022 走看看