软件设计模式

1.UML

1.1类图表示法

uml类图中,类使用包含类名、属性、方法

属性或方法前的加好和减号表示了这个方法的可见性,可见性的符号有三种:

+表示public

-表示private

#表示protected

1.2 类与类之间关系

关联关系

 单向关联

双向关系

自关联

聚合关系

聚合关系是关联关系的一种,是强关联关系,是整体和部分的关系

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,成员对象可以脱离整体对象独立存在。带空心菱形的实线来表示

组合关系

组合关系表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系

组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在了,部分对象也将不存在,部分对象不能脱离整体对象存在,用带实心菱形的实线来实现

依赖关系

依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联关系,是临时性的关联,在代码中,某个类的方法,通过局部变量、方法的参数或静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责;依赖关系用带箭头的虚线表示,箭头指向被依赖的类

继承关系

是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系;使用空心三角箭头实线表示,箭头从子类指向父类

实现关系

是接口与实现类之间的关系,类中的操作实线了接口中所声明的所有的抽象操作;实现关系用带空心三角箭头虚线来表示,箭头从实现类指向接口

2.软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性

开闭原则

对扩展开发,对修改关闭

要想达到这样的效果,需要使用接口和抽象类

里式代换原则

里式代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解为:子类可以扩展父类的功能,但不能改变父类原有的功能。换句话,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法

依赖倒转原则

高层模块不应该依赖底层模块,两者都应该依赖其抽象

抽象不应该依赖细节,细节应该依赖抽象

简单的说就是要求对抽象进行编程,不要对实现进行编程,这样降低了客户与实现模块间的耦合

3.创建型模式

用于描述"怎样创建对象",主要特点“将对象的创建与使用分离”

提供了单例、原型、工厂方法、抽象工厂、建造者

4.结构型模式

结构型模式描述如何将类或对象按某种布局组成更大的结构,分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足"合成复用原则",所以对象结构模式比类结构模式具有更大的灵活性。

结构型模式7种:代理模式、适配器模式、装饰着模式、桥接模式、外观模式、组合模式、享元模式

4.1 代理模式

由于某些原因需要给某对象提供一个代理以控制对该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。java中的代理按照代理了生成时机不同分为静态代理和动态代理。静态代理在编译器就生成,动态代理在java运行时动态生成。动态代理又有jdk代理和cglib代理。

5.行为模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务

行为型模式

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

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

相关文章

C/C++运算符超详细讲解(系统性学习day5)

目录 前言 一、运算符的概念与分类 二、算术运算符 三、关系运算符 四、逻辑运算符 五、赋值运算符 六、运算符的优先级 总结 前言 本篇文章是对运算符的具体讲解。 一、运算符的概念与分类 概念: 运算符就是一种告诉编译器执行特定的数学或逻辑操作的符…

自己写过比较蠢的代码:从失败中学习的经验

文章目录 引言1. 代码没有注释2. 长函数和复杂逻辑3. 不恰当的变量名4. 重复的代码5. 不适当的异常处理6. 硬编码的敏感信息7. 没有单元测试结论 🎉 自己写过比较蠢的代码:从失败中学习的经验 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&a…

【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码

目录 1 值热力图(Value Heatmap): 2 密度热力图(Density Heatmap) 3 时间热力图(Time Heatmap): 4 空间热力图(Spatial Heatmap) 5 渐变热力图(Gradient Heatmap&am…

红黑树Java实现

文章目录 红黑树1. 概念性质2. 红黑树节点定义3. 红黑树的插入情况1情况2情况3其它细节问题插入代码实现 4. 红黑树的验证5.性能分析 红黑树 1. 概念性质 红黑树也是一种二插搜索树,每一个节点上比普通二插搜索树都增加了一个存储位置表示节点的颜色,可…

Foxit PDF SDK Windows 9.1 Crack

Foxit PDF SDK 变更日志 Windows/Linux/Mac 2023 年 8 月 新功能/增强功能 在开始签名之前设置外观。支持使用共享字典添加签名。允许在调用 Signature::StartSign() 之前增量保存文档。在签名前修改现有未签名分页印章签名的外观。支持使用共享字典添加分页签名。忽略全角…

FPGA的主流技术与市场表现方面的调研报告

撰写简单的FPGA的主流技术与市场表现方面的调研报告,表达自己的认知和发展展望,500字,图片,表格除外 FPGA简介 FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,是在PAL &#xff08…

【软件测试】测试中的风险有哪些?

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试) ​那么到底都有哪些风险要注意呢?如何解决呢?另外这些风险如何在计划中写明呢,不会写“张三…

苏宁滑块验证

网址:https://passport.suning.com/ids/login总结一下,别被他的表面现象给骗了,这玩意儿,个人认为,腾讯的都没法跟他比!!! 难点:动态混淆,vmp,图片…

Django — 配置和路由

目录 一、项目的配置二、静态文件的配置三、路由1、概述2、代码实现2.1、后台管理页面2.2、子应用自定义页面2.3、子路由 3、路由解析顺序3.1、请求到达 Django 应用程序3.2、Django 根据 URL 路径查找匹配的路由3.3、第一个匹配的 URL 模式被选中3.4、相关联的视图函数被调用3…

Java由浅入深理解线程池设计和原理

目录 1 线程1.1 什么是线程?什么是进程?1.2 java中线程的实现方式有几种?1.3 线程的生命周期是什么? 2 线程存在的问题2.1 一个线程只能执行一个任务2.2 线程执行完后销毁,无法复用2.3 线程过多,导致JVM宕机 3 初识线程池3.1 了解J.U.C3.2 线…

追光者的梦

追光者的梦 鸿蒙中我茫然于世,你是钻入我心里的那束光 我所有的梦想都是和你热烈的拥抱 没有追到你时,我一直在路上 追到你时,我的人生就被你点燃 ——致所有的追光者 合肥先进光源国家重大科技基础设施项目及配套工程启动会刚开过&…

【matlab程序】海图单位的度分格式

【matlab程序】海图单位的度分格式 海洋与大气科学 点击蓝字 关注我们 思路来源 阅读文献: 文献中图片的横纵坐标出现半分画法: 半分画法,甚至更为精细的坐标轴在小区域研究中更为重要。 图片 图片 01 一度间隔 图片 代码 % 01 运…

2023 第十二届中国智能产业高峰论坛 - 文档大模型的未来展望

目录 前言文档图像分析识别与理解中的技术挑战 文档图像分析识别与理解的研究主题文档图像分析与预处理文档解析与识别版面分析与还原文档信息抽取与理解AI安全知识化&存储检索和管理 多模态大模型在文档图像处理中的应用多模态的GPT-4在文档图像上的表现多模态的Google Ba…

基因组注释(Annotation)

基因组组装完成后,或者是完成了草图,就不可避免遇到一个问题,需要对基因组序列进行注释。注释之前首先得构建基因模型,有三种策略: 从头注释(de novo prediction):通过已有的概率模型来预测基因结构&#…

Java实验案例(一)

目录 案例一:买飞机票 案例二:开发验证码 案例三:评委打分 案例四:数字加密 案例五:数组拷贝 案例六:抢红包 案例七:找素数的三种方法 案例八:打印乘法口诀表 案例九&#x…

大厂面试-16道面试题

1 java集合类有哪些? List是有序的Collection,使用此接口能够精确的控制每个元素的插入位置,用户能根据索引访问List中元素。常用的实现List的类有LinkedList,ArrayList,Vector,Stack。 ArrayList是容量…

某度sign参数逆向

文章目录 前文分析完整代码结尾 前文 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 分析 经过我们几次抓包,测试&#xf…

解决jupyter打开的默认路径问题

已经安装完anaconda,但是jupyter每一次打开的路径都不是自己想要的路径,可以在配置文件中修改jupyter打开的默认路径,具体步骤如下: 首先打开anaconda的命令行 如果有多个环境的,需要输入conda activate 环境名称以下命…

list容器排序案例

案例描述:将Perspn自定义数据类型进行排序&#xff0c;Person中属性有姓名、年龄、身高 排序规则:按照年龄进行升序&#xff0c;如果年龄相同按照身高进行降序 代码示例 #include <iostream> #include <string.h> #include <iterator> #include <vector…

【C++面向对象侯捷】12.虚函数与多态 | 13.委托相关设计【设计模式 经典做法,类与类之间关联起来,太妙了,不断的想,不断的写代码】

文章目录 12.虚函数与多态举例&#xff1a;委托 继承【观察者模式】13.委托相关设计Composite 组合模式Prototype 原型模式 12.虚函数与多态 纯虚函数 一定要 子类重新定义的 继承和复合 关系下的构造和析构 举例&#xff1a;委托 继承【观察者模式】 13.委托相关设计 问题…