软件设计模式概述

模式的诞生

       模式(Pattern)起源于建筑业而非软件业

       模式之父——美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander(克里斯托弗·亚历山大)博士

       《A Pattern Language: Towns, Buildings, Construction》——253个建筑和城市规划模式。

       他给出了模式的经典定义: 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,人们可以无数次地重用那些已有的解决方案,无须再重复相同的工作

定义

       模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。

       要点

              1.Context(模式可适用的前提条件)

              2.Theme或Problem(在特定条件下要解决的目标问题)

              3.Solution(对目标问题求解过程中各种物理关系的记述)

软件设计模式的发展

       从1995年至今,设计模式在软件开发中得以广泛应用,在Sun的Java SE/Java EE平台和Microsoft的.NET平台设计中应用了大量的设计模式。

       轻量级框架:Struts、Spring、Hibernate、JUnit、NHibernate、NUnit ……

       语言:C++、Java、C#、Objective-C、 VB.net、Smalltalk、PHP、 Delphi、JavaScript、Ruby……

       得到越来越多的企业和高校的关注与重视

       越来越多的书籍和网站

 软件设计模式的定义

         设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。

        软件设计模式一般包含模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式等基本要素,其中包含以下4个关键要素:

      1.模式名称 (Pattern Name):一个助记名,它用一两个词来描述模式的问题、解决方案和效果。

      2.问题 (Problem):描述了应该在何时使用模式。

      3. 解决方案 (Solution):描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。

      4. 效果 (Consequences):描述了模式应用的效果及使用模式应权衡的问题。

软件设计模式的分类

       按目的分为:

              1.创建型模式:用于特定对象的创建,提供解决建议

              2.结构型模式:用于处理类或对象的组合关系进行设计(元件间关系),为代码的稳定性、可扩展性等提供解决建议

              3.行为型模式:用于描述类或对象如何交互和怎样分配职责

       按范围分为:

              1.类模式:处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系。

              2.对象模式:处理对象间的关系,这些关系在运行时变化,更具动态性。

软件设计模式的优点

       1.融合了众多专家的经验,并以一种标准的形式供广大开发人员所用

       2.提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂

       3.让人们可以更加简单方便地复用成功的设计和体系结构

       4.使得设计方案更加灵活,且易于修改

       5.将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本

       6.有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量

 UML类图定义

       类是具有相似结构、行为和关系的一组对象的描述符。类图显示了一组类、接口、协作以及他们之间的关系。

       在UML中问题域最终要被逐步转化,通过类图来建模,通过编程语言构建这些类从而实现系统。

作用域

关系

       泛化(Generalization):表示类之间的继承关系,注意是子类指向父类。UML中用带空心三角箭头的实线表示泛化关系,箭头指向的是一般个体。

       实现(Realization):在Java中是一个class类实现interface接口(可多个)的功能,此类关系通过关键字implements明确标识。UML中用带三角箭头的虚线表示实现,箭头指向接口。

       依赖(Dependency):表示的是类之间的调用关系,代码体现在局部变量、方法的参数或者对静态方法的调用。UML中用带箭头的虚线表示依赖关系,而箭头所指的则是被依赖的类。

       关联(Association):类与类之间的一种拥有的关系,用于表示一类对象与另一类对象之间有联系。UML中用没有、单向或双向带箭头的实线表示关联关系,线上标注动词或者名词表示角色名。关联分为单向关联、双向关联和自关联3种。

       聚合(Aggregation):是关联关系的一种特例,表示的是整体与部分之间的关系,部分可以离开整体单独存在。UML中用空心菱形头的实线表示聚合关系,菱形头指向整体。

       组合(Composition):是一种强的‘拥有’关系,是一种contains-a的关系,体现了严格的部分和整体关系,代表整体的对象负责代表部分的对象的生命周期,二者具有相同的生命周期。UML中用实心菱形头的实线来表示组合,菱形头指向整体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/394228.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

atsec增加Swift CSP评估资质

atsec信息安全评估员现已被Swift列为Swift客户安全计划(CSP:Customer Security Programme)认证评估员目录中的评估提供商,可以帮助全球金融机构评估其针对CSP强制性和咨询性控制的合规级别。在金融行业,Swift要求使用其…

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log 1. Bin Log(二进制日志)2. Redo Log(重做日志)3. Undo Log(回滚日志) 💖The Begin💖点点关注,收藏不迷路&…

C++现代教程四

float转string不带多余0 float a 1.2; std::tostring(a); // 1.200000 std::ostringstream strStream; strStream << a; // 1.2 if (!strStream.view().empty()) // 判定流有数据// 边框融合 float measureText(std::u8string text, FontTypes::Rectangle &recta…

科研绘图系列:R语言圆形条形图(circular barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 介绍 圆形条形图(circular barplot)是一种条形图,其中的条形沿着圆形而不是线性排列展示。这种图表的输入数据集与普通条形图相同:每个组(一个组即一个条形)需要一个数值。(更多解释请参…

IDEA2024.2重磅发布,更新完有4G!

JetBrains 今天宣布了其 IDE 家族版本之 2024.2 更新&#xff0c;其亮点是新 UI 现在已是默认设置&#xff0c;并且对 AI Assistant &#xff08;AI助手&#xff09;进行了几项改进。 安装密道 新 UI 的设计更加简约&#xff0c;可以根据需要以视觉方式扩展复杂功能。值得开发…

Linux 下查看 CPU 使用率

目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…

QT生成.exe文件无法在未安装QT的电脑上运行的解决办法

在没有安装qt的电脑上运行qt生成的exe文件&#xff0c;提示&#xff1a; The application failed to start because no Qt platform plugin could be initialized 在网上找了很多办法&#xff0c;我尝试了 手动&#xff1a; 1、修改环境变量&#xff0c;2&#xff0c;添加pla…

C#开发编程软件下载安装

1、Visual Studio 2022社区版下载 2、开始安装 3、安装进行中 。。。。

【linux】curl命令用法

curl命令认识 curl命令其实在平常工作中就已经在使用了&#xff0c;但是一直没有系统看过&#xff0c;就在这记录下&#xff0c;以后要用的话&#xff0c;可以在这儿查阅。 curl命令写的更清楚一点其实是cURL&#xff08;client url&#xff0c;客户端URL或者command url命令…

QT(2.0)

1.常用控件的介绍 1.1 TextEdit QTextEdit表示多行输入框&#xff0c;也是一个富文本&markdown编辑器&#xff0c;并且能在内容超出编辑框范围时自动提供滚动条。 核心属性 属性 说明 markdown 输入框内持有的内容&#xff0c;支持markdown格式&#xff0c;能够自动的…

OpenGL实现3D游戏编程【连载3】——3D空间模型光照初步

1、本节实现的内容 上一节课&#xff0c;我们建立了简单的坐标系&#xff0c;同时也显示了一个正方体&#xff0c;但正方体的颜色为纯红色&#xff0c;好像一个平面物体一样&#xff0c;我们这节课就可以加一些光照&#xff0c;并创建更多的模型&#xff0c;使这些物体变得更加…

显示学习5(基于树莓派Pico) -- 彩色LCD的驱动

一 环境搭建 使用的ST7715S驱动的1.8寸彩色屏&#xff0c;主控是我们熟悉的树莓派Pico。软件环境是micropython。连接是屏幕直接从Pico取3.3V的供电&#xff0c;然后总线用的SPI。 ST7735 PinPico PinVCC3.3VGNDGNDSCL (SCK)GP10SDA (MOSI)GP11RES (RST)GP17DC&#xff08;A0…

【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面 ​ 前言 本系列可能是博客首发&#xff0c;鸿蒙开发星河版是一个全新的版本&#xff0c;由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线&#xff0c;…

第20周:Pytorch文本分类入门

目录 前言 一、前期准备 1.1 环境安装导入包 1.2 加载数据 1.3 构建词典 1.4 生成数据批次和迭代器 二、准备模型 2.1 定义模型 2.2 定义示例 2.3 定义训练函数与评估函数 三、训练模型 3.1 拆分数据集并运行模型 3.2 使用测试数据集评估模型 总结 前言 &#x1…

【JUC】03-CompletableFuture使用

1. CompletableFuture CompletableFuture可以进行回调通知、创建异步任务、多个任务前后依赖可以组合处理、对计算速度选最快。  CompletableFuture提供了一种类似于观察者模式的通知方式&#xff0c;可以在任务完成后通知监听方。 CompletableFuture实例化用CompletableFutur…

【弱网】模拟弱网环境

fiddler工具 调整上传/下载速率 打开fiddler脚本工具&#xff0c;在上方状态栏选择 Rules -> Customize Rules…&#xff0c;打开ScriptEditor编辑器 修改上传/下载速率&#xff0c;实现模拟指定弱网环境 计算公示&#xff1a;[1/(上或下行速率/8)] x 1000 网络上行下载2G2…

【Hive】学习笔记

Hive学习笔记 【一】Hive入门【1】什么是Hive【2】Hive的优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 【3】Hive架构原理&#xff08;1&#xff09;用户接口&#xff1a;Client&#xff08;2&#xff09;元数据&#xff1a;Metastore&#xff08;3&…

相机标定——小孔成像、相机模型与坐标系

小孔成像 用一个带有小孔的板遮挡在墙体与物之间&#xff0c;墙体上就会形成物的倒影&#xff0c;我们把这样的现象叫小孔成像。 用一个带有小孔的板遮挡在墙体与物之间&#xff0c;墙体上就会形成物的倒影&#xff0c;我们把这样的现象叫小孔成像。前后移动中间的板&#xff…

Docker 常规安装简介

Docker常规安装简介 欢迎关注我的B站&#xff1a;https://space.bilibili.com/379384819 1. 安装mysql 1.1 docker hub上面查找mysql镜像 网址&#xff1a; https://hub.docker.com/_/mysql 1.2 从docker hub上&#xff08;阿里云加速器&#xff09;拉取mysql镜像到本地标…

Redis远程字典服务器(0)——分布式系统

目录 一&#xff0c;关于Redis 二&#xff0c;分布式系统 2.1 关于分布式 2.2 理解数据库分离 2.3 理解负载均衡 2.4 数据库读写分离 2.5 引入缓存 2.6 数据库分库分表 2.7 微服务 四&#xff0c;补充 五&#xff0c;总结 一&#xff0c;关于Redis MySQL是在磁盘中存…