从正式接触设计模式到现在有一年了,一直以来都只是在一些技术文章中零零散散认知到一些设计模式,不知道是不是自己懒的缘故,就是没有好好系统的学习一下。这次借着做系统设计的机会,好好在此结合设计模式的理论总结一下。
我现在做的项目中有个子系统是专门负责设备管理的。既然是管理设备,自然就无外乎添加、删除、启动、停止四种功能。这里的设备有很多种,如感应器(用来采集数据信息),又或者是输出设备(打印机)。下面就是设备管理子系统的UML类图(点击可放大):
估计有高人一看就会对图中有些地方作出过度设计的判断,或是其它处理不妥当的地方:)。没关系,正如开头提到的本文旨在总结设计模式中结构模式的应用,所以上图是为了尽可能全的呈现结构模式下所有模式应用而刻意做了一些额外的考虑。
为了能够突出每个结构模式在上图的应用,请见下图:
代理和装饰器(红色框)
DeviceManagerSecurityProxy实现了DeviceManager接口,同时也持有一个DeviceManager的实现对象的引用,目的是在委派给真正的DeviceManager的实现对象执行设备管理操作之前,需要实现执行权限验证的操作,以确定此次调用是合法的。
装饰器和代理很容易混淆,就因为它们在代码的实现上完全一样,区别仅仅在于模式解决的问题域不同:代理在于控制被代理的对象;装饰器则是增强被装饰对象的能力或行为。我倒是觉得,在实际应用中没有必要在区分二者上让自己抓狂,毕竟代码的实现结构没有什么区别,何必在乎它的叫法呢?
适配器(绿色框)
DeviceManager定义了addDevice的方法,其实现恰好可以复用DeviceFactory的factory方法以创建一个Device的实例,那么这里的AbstactDeviceManager就担当了适配器的角色。这里是一个对象适配器模式的实现。
桥梁(橙色框)
DeviceManager抽象了设备管理的行为,但像启动、停止设备的操作是需要Device的实现类进行底层实现的,这正如桥梁模式的用意——“将抽象化和实现化脱耦,使得二者可以独立变化”。
合成(紫色框)
在设备管理的界面上,通常习惯用树形目录来呈现设备单元。每个设备自然就是树叶,当然为了方便管理,我们需要逻辑设备(LogicalDevice)这样类似设备组的概念,它关联一到多个物理设备,也就成了一个树节点。这样,当有需要对同一组设备进行操作的时候,也就只用操作逻辑设备就行了。这里是个安全式合成模式的实现。
亨元(黑色框)
这是结构模式中最为复杂的一个模式,主要用意在于共享对象实例,减少内存消耗。这里通过亨元模式来避免对统一设备的重复添加,尽管这样应用亨元模式有点牵强:P。
不过个人觉得,亨元模式的核心在于控制对象的创建,为什么GOF要将它列为结构模式的一种,这让我有点迷惑。
门面
图中貌似没有标出门面模式的应用,其实它的应用体现就是DeviceManager,它是设备管理子系统的统一接口,外部系统只需要通过它就可以享受所有设备管理子系统提供的服务了。
小结
结构模式可归结为两个关键字:
- 接口 接口明确规定了系统(或模块)的结构;
- 复用扩展 基于接口进行对复用原有组件的基础上添加新的行为,或是对原有行为的一种组合应用。
- 大小: 50.2 KB
- 描述: 设备管理类图
- 大小: 24.4 KB
分享到:
相关推荐
基于这一重要性,本文将对“数据结构与算法”课程的学习进行总结,旨在梳理和回顾所学的核心内容,并对后续学习的侧重点提出建议。 课程伊始,我们首先对数据结构与算法的基础知识进行了回顾。数据是信息的载体,...
实验报告的主题是“数据结构图的应用”,主要涵盖了图的存储结构、遍历方法以及最小生成树的求解。实验目标是掌握图的邻接矩阵和邻接表存储方式,理解图的操作算法,并通过C++实现。同时,实验还强调了实际问题的...
【结构思考力】是一种强大的思维方式,它强调将复杂的思考过程结构化,使我们的思维更加清晰,表达更加有力。通过学习结构思考力,个人在生活和工作中可以显著提升问题解决和沟通效率。 在学习前,可能存在一个问题...
《数据结构与算法课程总结》 数据结构与算法是计算机科学的基础,它们涉及到如何有效地组织和处理数据,以及如何设计高效解决问题的步骤。本课程主要围绕《数据结构与算法设计》一书展开,通过“算法思想——算法...
栈和队列是数据结构中两个重要的数据结构,栈和队列的定义、存储结构、循环队列、栈和队列的主要运算、栈的应用举例等都是数据结构的重要内容。栈和队列的实现可以采用顺序存储和链式存储两种方式。 第五章 串 串...
本篇文章将对一系列重要的C#面向对象设计模式进行总结,帮助开发者更好地理解和应用这些模式。 1. 工厂模式:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了代码与具体类...
《考研数据结构算法总结》是针对计算机科学与技术专业考研学子的重要参考资料,它全面而深入地涵盖了数据结构领域的核心算法。这份资料集旨在帮助备考者系统性地理解和掌握数据结构中的基本概念、重要算法以及应用...
在本总结中,我们将探讨几种重要的数据结构和相关的算法,主要包括:HASH表、栈、双端循环链表、顺序表、循环队列以及一些基本的排序方法。 **HASH表** 是一种通过哈希函数将键映射到数组特定位置的数据结构,以...
15. **计算机系统结构、组成和实现的关系**:结构决定组成的方式,实现受限于结构和组成,三者相互影响,比如不同实现方式对结构和组成的影响,以及应用需求对设计选择的引导。 16. **软件移植途径的限制**:统一...
《数据结构习题总结 拾荒小记》是一份以C++语言实现的数据结构算法集,涵盖了严蔚敏教授经典教材中的80%算法。这份资料旨在帮助学习者巩固和深化对数据结构的理解,同时也为社区提供了一份宝贵的资源。 首先,让...
PKPM结构软件知识总结是指PKPM结构软件中的知识点总结,包括PKPM结构软件的基本概念、应用场景、计算方法、参数设置、结果解释等方面的知识点。下面是PKPM结构软件知识总结的详细内容: 一、PKPM结构软件基本概念 ...
总结来说,计算机图形学中数据结构的多元应用途径,不仅包括了图形信息的存储、组织和转换,还包括了图形信息的处理和效果呈现等多个方面。随着计算机技术的快速发展,数据结构在计算机图形学中的作用愈发重要,它们...
第一篇分为8章,介绍了软件体系结构的基础理论,包括软件体系结构的概念及演化、软件建模基础、软件体系结构的形式化、软件体系结构的风格、体系结构的描述语言、软件质量建模、设计模式等内容。第二篇分为4章,首先...
根据给定的信息,本文将对数据结构的基本概念及其在计算机科学中的重要性进行总结与探讨。虽然提供的部分内容似乎与主题不完全相符,但我们将重点围绕标题、描述以及标签中的核心内容——“数据结构”来进行深入解析...
数据结构是组织、管理、存储和检索数据的方式,它不仅涉及数据的逻辑组织,还涉及物理存储方式。常见的数据结构有数组、链表、栈、队列、树、图等。 数组是最基础的数据结构,它是一组相同类型元素的集合,可以通过...
总结起来,数据库原理及应用涵盖了数据库的定义、组成、功能以及其独特的三级模式结构和数据独立性,这些都是理解和操作数据库系统的基础。了解这些概念对于开发高效、安全和可靠的数据管理解决方案至关重要。
设计模式是解决特定设计问题的通用解决方案,它们被总结为可以重复使用的模板。在面向对象技术中,设计模式是提高软件质量和开发效率的关键工具。常见的设计模式包括单例模式、工厂模式、策略模式、观察者模式等。 ...