java设计模式之组合设计模式

什么组合设计模式?为什么要使用组合设计模式?

组合模式:组合(Composite)模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式属于结构型设计模式。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式最大的特性就是使用树形结构,这里是把结构封装层树形结构,客户端无需关注内部实现,只需要更加节点获取树形里面指定的节点数据、定义树节点方法进行层级管理,我们常见的应用场景:

树形菜单,文件目录,磁盘分类,组织结构 这种类型都可以是组合模式的应用场景。

这里我们就采用树形结构的方式来讲解,树形结构的最大特点就是部分和整体就是组合设计模式,举个例子我的计算机和我的D盘和C盘就是属于部分,而计算机就是一个整体。

计算机:

 D盘:

 计算机属于整体,D盘C盘属于计算机的部分,D盘下面的文件大小,文件类型,日期,属性就属于D盘的部分。

话不多说直接上代码:

代码类图:

磁盘: 

package com.xy.design.combination;

/**
 * <p>
 *
 * @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;

/**
 * <p>
 *
 * @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方法和循环迭代。

以上就是组合模式的使用。

  ————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨互联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值