设计模式-组合模式
定义
Composite Pattern
组合模式也叫 整体-部分模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示。
作用:使客户端对单个对象和组合对象保持一致的方式处理。
属于结构型
使用场景
- 希望客户端可以忽略组合对象与单个对象的差异时
- 对象层次具备整体和部分,呈树形结构(树形菜单,操作系统目录,公司组织架构等)
安全写法
拿文件目录举例。
新建一个 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