zoukankan      html  css  js  c++  java
  • 设计模式:组合模式

    组合模式非java核心中的组合。

    组合模式的定义:把部分和整体关系用“树形结构”来表示。从而使客户端可用同一方式处理部分对象或整体对象。

    树形结构例子:比如平时的配置文件xml, 文件系统等

    核心:

      抽象角色:定义了叶子和容器构件的共同点。如文件系统中文件和文件夹的特性。

      叶子构建角色(树的叶子):无子节点。如文件系统中的文件。

      容器构建角色:如文件系统中的文件夹。

    组合模式使用户在使用时通过抽象角色一致处理容器和叶子。

    当容器对象指定方法被调用时,将遍历整个树形结构。寻找包含这个方法的成员并调用执行。

    例子:

      

    /**
     * 模拟杀毒软件
     * <p>
     * 抽象组件,
     */
    public interface AbstraceFile {
    
        void scanVirus();
    }
    
    /**
     * 叶子组件
     * <p>
     * 文件。
     */
    class TextFile implements AbstraceFile {
    
        private String name;
    
        public TextFile(String name) {
            this.name = name;
        }
    
        @Override
        public void scanVirus() {
            System.out.println("完成文本文件" + name + "扫描");
        }
    }
    
    /**
     * 容器组件
     * <p>
     * 文件夹
     */
    class Folder implements AbstraceFile {
        private String name;
        private List<AbstraceFile> fileList;
    
        public Folder(String name) {
            this.name = name;
            fileList = new ArrayList<>();
        }
    
        /**
         * 这里包含一个天然递归方法
         */
        @Override
        public void scanVirus() {
            System.out.println("扫描文件夹");
            for (AbstraceFile file : fileList) {
                file.scanVirus();
            }
    
        }
    
        /**
         * 容器新增方法
         *
         * @param file
         */
        public void add(AbstraceFile file) {
            fileList.add(file);
        }
    
        /**
         * 容器新增方法
         *
         * @param file
         */
        public void remove(AbstraceFile file) {
            fileList.remove(file);
        }
    }
    

      

    public class Client {
        public static void main(String[] args) {
            Folder file1 = new Folder("文件夹1");
            AbstraceFile file2 = new TextFile("文本文件1");
    
    //        file2.scanVirus();
            
            file1.add(file2);
            //统一处理方式
            file1.scanVirus();
    
        }
    }
    

      这里模拟了一个简单的文件扫描工具,先建立文件夹,和一些文件,使用统一的操作接口去操作文件和文件夹,进行扫描操作。

  • 相关阅读:
    第十周总结
    冲刺(四)
    冲刺(三)
    冲刺(二)
    冲刺(一)
    生成热词
    c#简单日志类
    WPF 后台代码 实现DynamicResource 绑定赋值
    WPF ListboxItem 双击事件 Command绑定
    mysql的命令行安装,忘记密码,密码重置问题
  • 原文地址:https://www.cnblogs.com/gcm688/p/10187592.html
Copyright © 2011-2022 走看看