什么组合设计模式?为什么要使用组合设计模式?
组合模式:组合(Composite)模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式属于结构型设计模式。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式最大的特性就是使用树形结构,这里是把结构封装层树形结构,客户端无需关注内部实现,只需要更加节点获取树形里面指定的节点数据、定义树节点方法进行层级管理,我们常见的应用场景:
树形菜单,文件目录,磁盘分类,组织结构 这种类型都可以是组合模式的应用场景。
这里我们就采用树形结构的方式来讲解,树形结构的最大特点就是部分和整体就是组合设计模式,举个例子我的计算机和我的D盘和C盘就是属于部分,而计算机就是一个整体。
计算机:

D盘:

计算机属于整体,D盘C盘属于计算机的部分,D盘下面的文件大小,文件类型,日期,属性就属于D盘的部分。
话不多说直接上代码:
代码类图:

磁盘:
- package com.xy.design.combination;
-
- /**
- *
- *
- * @author yang
- * @since 2022-10-22
- */
- public abstract class Disk {
-
- public abstract File getFile();
-
- public abstract void add(Disk component);
-
- }
计算机:
- package com.xy.design.combination;
-
- import org.springframework.beans.factory.annotation.Autowired;
-
- /**
- *
- *
- * @author yang
- * @since 2022-10-22
- */
- public class Competer extends Disk {
-
-
- private File file;
-
- private int level;
-
- public Competer(File file) {
- this.file = file;
- }
-
-
- @Autowired
- public File getFile() {
- System.out.println("文件名称:" + file.getName() + " 文件大小:" + file.getSize() + " 文件时间: " + file.getCreateTime());
- return file;
- }
-
- @Override
- public void add(Disk component) {
-
- }
-
-
- }
文件类:
- package com.xy.design.combination;
-
- /**
- * @author yang
- * @description
- */
-
- public class File extends Disk {
-
-
- private String name;
-
- private String content;
-
- private long size;
-
- private String createTime;
-
-
- public File(String name, String content, long size, String createTime) {
- this.name = name;
- this.content = content;
- this.size = size;
- this.createTime = createTime;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getContent() {
- return content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public long getSize() {
- return size;
- }
-
- public void setSize(long size) {
- this.size = size;
- }
-
- public String getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
-
- @Override
- public File getFile() {
- return this;
- }
-
- @Override
- public void add(Disk component) {
- component.getFile();
- }
-
-
- }
组合模式的特点:整体和部分。
组合模式透明的组合模式和安全的组合模式
透明模式,是把用来组合使用的方法放到抽象类中,不管叶子节点还是树枝节点都有相同的结构,如果处理不当,这个会在运行期出现问题,不是很建议的方式;
安全模式你可以理解为电脑的c盘和d盘是分开的,而c盘的结构和D盘一样,但是他们之间的权限是不一样的,也可以理解为非透明模式。
其实代码很简单,你只要满足部分和整体这个概念,一个组合设计模式就成功实现了,文件是属于磁盘的一部分,磁盘又属于计算机的一部分,而计算机就是属于代码的一部分,代码就是我正在的写的一部分。而我正在写代码,我就是一个整体不是。
以上的代码还可以优化,比如文件的层级结构,和节点信息,我们可以使用Tree来完善我们的代码,加入一些curd方法和循环迭代。
以上就是组合模式的使用。
————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)