• 设计模式-组合模式


    设计模式-组合模式

    定义

    Composite Pattern

    组合模式也叫 整体-部分模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示。

    作用:使客户端对单个对象和组合对象保持一致的方式处理。

    属于结构型

    使用场景

    1. 希望客户端可以忽略组合对象与单个对象的差异时
    2. 对象层次具备整体和部分,呈树形结构(树形菜单,操作系统目录,公司组织架构等)

    安全写法

    拿文件目录举例。

    新建一个 BlackDirectory 目录类

    package com.black.design.pattern.composite.safe;
    
    
    // 目录类
    public abstract class BlackDirectory {
    
        // 目录名
        protected String name;
    
        public BlackDirectory(String name) {
            this.name = name;
        }
        
        // 由子类覆盖
        public abstract void show();
    }
    
    
    

    新建一个 BlackFolder 文件夹类

    package com.black.design.pattern.composite.safe;
    
    import java.util.ArrayList;
    import java.util.List;
    
    // 文件夹
    public class BlackFolder extends BlackDirectory {
    
        List<BlackDirectory> dirs ;
        
        Integer level;
        
        public BlackFolder(String name, Integer level) {
            super(name);
            this.level =level ;
            this.dirs = new ArrayList<BlackDirectory>();
        }
        
        public void show() {
            System.out.println(this.name);
             for (BlackDirectory d: dirs) {
                 if(this.level != null) {
                     // 按等级进行缩进
                     for (int i = 0; i < level; i++) {
                       System.out.print("    ");
                   }
                     for (int i = 0; i < level; i++) {
                         if (i==0) {
                             System.out.print("+");
                         }else {
                             System.out.print("-");
                         }
                     }
                 }
                d.show();
            }
        }
    
        public void add(BlackDirectory b) {
            this.dirs.add(b);
        }
        
        public void remove(BlackDirectory b) {
            this.dirs.remove(b);
        }
        
        public BlackDirectory get(int idx) {
            return this.dirs.get(idx);
        }
    }
    
    
    

    新建一个 BlackFile 文件类

    package com.black.design.pattern.composite.safe;
    
    // 文件
    public class BlackFile extends BlackDirectory {
    
        public BlackFile(String name) {
            super(name);
        }
    
        @Override
        public void show() {
            System.out.println(super.name);
        }
    
    }
    

    测试类:

    package com.black.design.pattern.composite.safe;
    
    public class Test {
    
        public static void main(String[] args) {
            System.out.println("========安全模式=========");
            BlackFolder root  = new BlackFolder("d:/", 1);
            BlackFolder java  = new BlackFolder("java", 2);
            BlackFile javafile1 = new BlackFile("《Java 编程思想》");
            BlackFile javafile2 = new BlackFile("《Java 核心技术》");
            BlackFile javafile3 = new BlackFile("《并发编程的艺术》");
            java.add(javafile1);
            java.add(javafile2);
            java.add(javafile3);
            
            BlackFolder spring  = new BlackFolder("spring", 2);
            BlackFile springfile1 = new BlackFile("《Spring 核心思想》");
            BlackFile springfile2 = new BlackFile("《SpringBoot 核心思想》");
            BlackFile springfile3 = new BlackFile("《SpringCloud 核心思想》");
            spring.add(springfile1);
            spring.add(springfile2);
            spring.add(springfile3);
            
            root.add(java);
            root.add(spring);
            root.show();
        }
    }
    
    

    测试结果

    ========安全模式=========
    d:/
        +java
            +-《Java 编程思想》
            +-《Java 核心技术》
            +-《并发编程的艺术》
        +spring
            +-《Spring 核心思想》
            +-《SpringBoot 核心思想》
            +-《SpringCloud 核心思想》
    
    

    本文来自博客园,作者:不安分的黑娃,转载请注明原文链接:https://www.cnblogs.com/lihw-study/p/15164709.html

  • 相关阅读:
    雷霆战机
    各种 Python 库/模块/工具
    redis
    25
    为什么Python中“2==2>1”结果为True
    thinkphp3.2路由美化,url简化
    thinkphp调整框架核心目录think的位置
    thinkphp3.2中开启静态缓存后对404页面的处理方法
    thinphp中volist嵌套循环时变量$i 被污染问题,key="k"
    thinkphp中如何是实现多表查询
  • 原文地址:https://www.cnblogs.com/lihw-study/p/15164709.html
Copyright © 2020-2023  润新知