.net 有哪些主流的设计模式_「设计模式」组合模式详解

前言

《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有:

  • 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范)
  • 该模式的代码示例:熟悉该模式的代码长什么样子
  • 该模式的优缺点:模式不是万金油,不可以滥用模式
  • 该模式的应用案例:了解它在哪些重要的源码中被使用

该系列会逐步更新于我的博客和公众号(博客见文章底部),也希望各位观众老爷能够关注我的个人公众号:后端技术漫谈,不会错过精彩好看的文章。

系列文章回顾

  • 【设计模式自习室】开篇:为什么我们要用设计模式?
  • 【设计模式自习室】建造者模式
  • 【设计模式自习室】原型模式
  • 【设计模式自习室】透彻理解单例模式
  • 【设计模式自习室】理解工厂模式的三种形式
  • 【设计模式自习室】适配器模式
  • 【设计模式自习室】装饰模式
  • 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化
  • 【设计模式自习室】门面模式 Facade Pattern
  • 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量
  • 【设计模式自习室】详解代理模式

结构型——组合模式 Composite

引子

组合模式是为了表示那些层次结构,同时部分和整体也可能是一样的结构,常见的如文件夹或者树。

586dccbc89ce23a82ef8876de4eb3a26.png

上图来自:

https://www.cnblogs.com/betterboyz/p/9356458.html

从上图可以看出,文件系统是一个树结构,树上长有节点。树的节点有两种,一种是树枝节点,即目录,有内部树结构,在图中涂有颜色;另一种是文件,即树叶节点,没有内部树结构。

定义

组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。

在使用组合模式中需要注意几点也是组合模式最关键的地方:叶子对象和组合对象实现相同的接口。这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。

合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全式和透明式,将在类图一节中详细介绍两种形式。

类图

安全式合成模式

安全模式的合成模式要求管理聚集的方法只出现在树枝构件类中,而不出现在树叶构件类中。

  • Compon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多例设计模式是单例模式的一种变体。它允许创建有限数量的实例,而不是像单例模式一样只创建一个实例。在Java多例模式中,每个实例都有一个唯一的名称,以便在需要时可以使用。 下面是一个Java多例模式的示例代码: ```java public class Database { private static Map<String, Database> instances = new HashMap<String, Database>(); private String name; private Database(String name) { this.name = name; } public static synchronized Database getInstance(String name) { if (!instances.containsKey(name)) { instances.put(name, new Database(name)); } return instances.get(name); } public String getName() { return name; } } ``` 在这个示例中,我们创建了一个名为Database的类,它有一个私有构造函数和一个静态的getInstance方法,该方法根据名称获取或创建一个实例。我们使用一个Map来存储实例,以便在需要时可以检索它们。如果需要创建一个新的实例,我们将它添加到Map中。 以下是一个使用多例模式创建数据库实例的示例: ```java Database db1 = Database.getInstance("db1"); Database db2 = Database.getInstance("db2"); Database db3 = Database.getInstance("db1"); System.out.println(db1.getName()); // Output: db1 System.out.println(db2.getName()); // Output: db2 System.out.println(db3.getName()); // Output: db1 ``` 在这个示例中,我们创建了三个Database实例,其中两个具有不同的名称,但具有相同的名称的实例是相同的。我们使用getName方法来检索实例的名称,并验证它们是否正确。 总的来说,Java多例模式是一个灵活和有用的设计模式,允许我们创建有限数量的实例,并根据需要使用它们。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值