当前位置: 首页 > news >正文

二十三种设计模式全面解析-组合模式与享元模式的结合应用:实现对象的共享和高效管理


在前文中,我们介绍了组合模式的基本原理和应用,以及它在构建对象结构中的价值和潜力。然而,组合模式的魅力远不止于此。在本文中,我们将继续探索组合模式的进阶应用,并展示它与其他设计模式的结合使用,以构建更灵活、可扩展的对象结构。精彩的旅程即将开始!


组合模式和享元模式都是处理对象结构的重要设计模式。它们的结合应用可以实现对共享对象的高效管理,减少对象的重复创建和内存消耗。

在组合模式中,对象组合类通常持有一个子组件列表,用于管理和处理子组件。当子组件的创建和销毁操作频繁时,可能会导致大量的对象创建和销毁开销。这时,可以通过享元模式来共享相同的子组件,从而节省内存和提高性能。

让我们通过一个案例来理解组合模式和享元模式的结合应用:


import java.util.HashMap;
import java.util.Map;interface Component {void operation();
}class ConcreteComponent implements Component {private String name;public ConcreteComponent(String name) {this.name = name;}@Overridepublic void operation() {System.out.println("执行具体组件 " + name + " 的操作");}
}class Composite implements Component {private Map<String, Component> components = new HashMap<>();public void addComponent(String key, Component component) {components.put(key, component);}public void removeComponent(String key) {components.remove(key);}@Overridepublic void operation() {System.out.println("执行组合对象的操作");for (Component component : components.values()) {component.operation();}}
}class ComponentFactory {private static Map<String, Component> componentMap = new HashMap<>();public static Component getComponent(String key) {Component component = componentMap.get(key);if (component == null) {component = new ConcreteComponent(key);componentMap.put(key, component);}return component;}
}public class Client {public static void main(String[] args) {Composite composite = new Composite();composite.addComponent("A", ComponentFactory.getComponent("A"));composite.addComponent("B", ComponentFactory.getComponent("B"));composite.addComponent("C", ComponentFactory.getComponent("C"));composite.addComponent("A", ComponentFactory.getComponent("A"));composite.operation();// 输出:// 执行组合对象的操作// 执行具体组件 A 的操作// 执行具体组件 B 的操作// 执行具体组件 C 的操作}
}

在上述代码中,我们引入了一个ComponentFactory工厂类,用于创建和管理具体组件对象。当需要获取组件时,首先在工厂类中查找是否已经存在该组件,如果存在则返回共享的组件实例,否则创建一个新的组件实例并进行共享。


总结:

通过组合模式和享元模式的结合应用,我们可以实现对共享对象的高效管理,减少了对象的重复创建和内存消耗。这种方式特别适用于需要频繁创建和销毁的对象组件场景,提高了系统的性能和资源利用率。


然而,组合模式的进阶应用和与其他设计模式的结合远不止于此。下一篇博文中,我们将继续探索组合模式的更多应用场景和与其他设计模式的结合,带您进一步领略组合模式的魅力!


好了,今天的分享到此结束。如果觉得我的博文帮到了您,您的点赞和关注是对我最大的支持。如遇到什么问题,可评论区留言。

http://www.lryc.cn/news/226075.html

相关文章:

  • jenkins分步式构建环境(agent)
  • 前端开发学习指南
  • 环境变量小节
  • React Native适配Xcode 15 iOS 17.0+
  • Install Docker in Linux
  • Spring源码-循环依赖
  • Excel下拉填充时,如何使得数字不递增?
  • ThreadLocal原理以及内存泄露问题
  • 值之字符串(string)
  • pytoch安装指定版本教程pytorch1.3安装笔记
  • k8s 裸金属集群部署metalLB软负载均衡 —— 筑梦之路
  • uni-app使用echarts数据不更新
  • 单挑特斯拉,华为智选车迈入第二阶段
  • acwing算法基础之搜索与图论--有向图的拓扑序列
  • Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority
  • Go并发编程(上)
  • MarkDown基础及表格、KaTeX公式、矩阵、流程图、UML图、甘特图语法
  • Citespace的使用
  • [模块]ES6与cjs的混合开发
  • git上传项目至github(Linux)
  • SSH 远程登录 WSL
  • 每天一道算法题:40. 组合总和 II
  • Centos7安装PostgreSQL 14
  • Shopee的折扣活动怎么分类?shopee设置折扣注意事项
  • 磁盘空间占用巨大的meta.db-wal文件缓存(tracker-miner-fs索引服务)彻底清除办法
  • 力扣:160. 相交链表(Python3)
  • 【华为OD机试AB高分必刷题目】无名的搜索题(Java-优先搜索(DFS)实现)
  • ant 任务(task)通过内嵌的arg元素传递命令行参数
  • STM32G0+EMW3080+阿里云飞燕平台实现单片机WiFi智能联网功能(三)STM32G0控制EMW3080实现IoT功能
  • IntelliJ IDEA - Git Commit 后 Commit 窗口不消失解决方案