不安分的黑娃
踏踏实实,坚持学习,慢慢就懂了~

设计模式-组合模式

定义

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 核心思想》

posted on 2021-08-28 19:52  不安分的黑娃  阅读(35)  评论(0编辑  收藏  举报