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


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

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

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

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

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

    计算机:

     D盘:

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

    话不多说直接上代码:

    代码类图:

    磁盘: 

    1. package com.xy.design.combination;
    2. /**
    3. *

    4. *
    5. * @author yang
    6. * @since 2022-10-22
    7. */
    8. public abstract class Disk {
    9. public abstract File getFile();
    10. public abstract void add(Disk component);
    11. }

     计算机:

    1. package com.xy.design.combination;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. /**
    4. *

    5. *
    6. * @author yang
    7. * @since 2022-10-22
    8. */
    9. public class Competer extends Disk {
    10. private File file;
    11. private int level;
    12. public Competer(File file) {
    13. this.file = file;
    14. }
    15. @Autowired
    16. public File getFile() {
    17. System.out.println("文件名称:" + file.getName() + " 文件大小:" + file.getSize() + " 文件时间: " + file.getCreateTime());
    18. return file;
    19. }
    20. @Override
    21. public void add(Disk component) {
    22. }
    23. }

    文件类: 

    1. package com.xy.design.combination;
    2. /**
    3. * @author yang
    4. * @description
    5. */
    6. public class File extends Disk {
    7. private String name;
    8. private String content;
    9. private long size;
    10. private String createTime;
    11. public File(String name, String content, long size, String createTime) {
    12. this.name = name;
    13. this.content = content;
    14. this.size = size;
    15. this.createTime = createTime;
    16. }
    17. public String getName() {
    18. return name;
    19. }
    20. public void setName(String name) {
    21. this.name = name;
    22. }
    23. public String getContent() {
    24. return content;
    25. }
    26. public void setContent(String content) {
    27. this.content = content;
    28. }
    29. public long getSize() {
    30. return size;
    31. }
    32. public void setSize(long size) {
    33. this.size = size;
    34. }
    35. public String getCreateTime() {
    36. return createTime;
    37. }
    38. public void setCreateTime(String createTime) {
    39. this.createTime = createTime;
    40. }
    41. @Override
    42. public File getFile() {
    43. return this;
    44. }
    45. @Override
    46. public void add(Disk component) {
    47. component.getFile();
    48. }
    49. }

     组合模式的特点:整体和部分。

    组合模式透明的组合模式和安全的组合模式

    透明模式,是把用来组合使用的方法放到抽象类中,不管叶子节点还是树枝节点都有相同的结构,如果处理不当,这个会在运行期出现问题,不是很建议的方式;

    安全模式你可以理解为电脑的c盘和d盘是分开的,而c盘的结构和D盘一样,但是他们之间的权限是不一样的,也可以理解为非透明模式。

    其实代码很简单,你只要满足部分和整体这个概念,一个组合设计模式就成功实现了,文件是属于磁盘的一部分,磁盘又属于计算机的一部分,而计算机就是属于代码的一部分,代码就是我正在的写的一部分。而我正在写代码,我就是一个整体不是。

    以上的代码还可以优化,比如文件的层级结构,和节点信息,我们可以使用Tree来完善我们的代码,加入一些curd方法和循环迭代。

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

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

  • 相关阅读:
    JAVA队列及实现类
    文件的随机读写函数:ftell & rewind
    基于 ACK Fluid 的混合云优化数据访问(五):自动化跨区域中心数据分发
    P5194 [USACO05DEC]Scales S
    uniapp开发ios上线(在win环境下使用三方)
    JS元编程
    Worthington羧基转移丨碳酸酐酶的应用和文献参考
    Android多模块打包aar
    再有人说synchronized是重量级锁,就把这篇文章扔给他看
    微积分 - 洛必达法则的四种类型
  • 原文地址:https://blog.csdn.net/qq_39751120/article/details/127154685