【学习笔记】软件设计模式(一)基本概念与归纳总结
软件设计模式之基本概念与归纳总结
本人学习笔记。内容参考《Java设计模式》刘伟 教程配套PPT。仅供学习参考使用。
文章目录
- 软件设计模式概述
- 模式的分类
- 模式定义和特点的归纳总结
- 1.创建型模式
- 2.结构型模式
- 3.行为型模式:
- 面向对象设计原则
- UML图
- 类的UML图示
- 类之间的关系
软件设计模式概述
设计模式一般包含模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式等基本要素,4个关键要素为:模式名称、问题、解决方案、效果。
模式的分类
根据目的可分为三类:
- 创建型模式。主要用于创建对象。 (具体请阅读【学习笔记】软件设计模式(二)创建型模式)
- 结构型模式。主要用于处理类或对象的组合。(具体请阅读【学习笔记】软件设计模式(三)结构型模式)
- 行为型模式。主要用于描述类或对象如何交互和怎样分配职责。(具体请阅读【学习笔记】软件设计模式(四)行为型模式)
根据范围,可分为两种:
- 类模式。处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系。
- 对象模式。处理对象间的关系,这些关系在运行时变化,更具动态性。
详细的划分,纵向为基于目的的分类,横向为基于范围的分类:
模式定义和特点的归纳总结
下面三个表格我总结了三大种模式的每个模式的定义和例子,方便快速回顾:
1.创建型模式
(模式名称加粗的属于类模式,下同)
模式名称 | 定义 | 形象化例子 | 应用实例 |
---|---|---|---|
简单工厂模式 | 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 | 农场种瓜得瓜 | 提供多种不同外观的图表的图表库 |
工厂方法模式 | 定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 | 一个工厂生产一样产品 | 通过多种途径保存日志的日志记录器 |
抽象工厂模式 | 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 | 一个工厂生产一种风格的系列产品 | 提供不同风格界面的皮肤库 |
建造者模式 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 | 生产汽车不用管零部件 | 有多个属性的游戏角色 |
原型模式 | 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 | 孙悟空拔毛 | 快速创建相同或者相似的周报 |
单例模式 | 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。 | Windows任务管理器 | 负责管理和请求的分发的服务器负载均衡器 |
2.结构型模式
模式名称 | 定 义 | 形象化例子 | 应用实例 |
---|---|---|---|
适配器模式 | 将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。 | 电源适配器 | 重用灯光声音设计玩具车 |
桥接模式 | 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。 | 毛笔颜色和型号分离 | 跨平台图像浏览系统 |
组合模式 | 组合多个对象形成树形结构,以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 | 操作系统目录结构 | 可杀毒不同文件的杀毒软件 |
装饰模式 | 动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。 | 图片加边框 | 图形界面构件库 |
外观模式 | 为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 | 去茶馆喝茶 | 文件加密(包含读写) |
享元模式 | 运用共享技术有效地支持大量细粒度对象的复用。 | 活字印刷 | 围棋软件的棋子对象 |
代理模式 | 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 | 代购 | 信息查询系统 |
3.行为型模式:
模式名称 | 定 义 | 形象化例子 | 应用实例 |
---|---|---|---|
职责链模式 | 将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。 | 奖学金 | 企业采购的分级审批 |
命令模式 | 将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。 | 电路开关 | 自定义功能键的功能 |
解释器模式 | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 | 语法分析和翻译 | 机器人控制指令表达式 |
迭代器模式 | 提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。 | 电视遥控器 | 营销管理系统(遍历) |
中介者模式 | 定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显式地相互引用,从而使其耦合松散,而且让你可以独立地改变它们之间的交互。 | 联合国、QQ群 | 客户信息管理窗口 |
备忘录模式 | 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 | 月光宝盒、后悔药 | 中国象棋悔棋 |
观察者模式 | 定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。 | 红绿灯与司机 | 多人联机游戏的联盟系统 |
状态模式 | 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 | 水的固液气 | 银行账户状态转换、倍镜状态 |
策略模式 | 定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法可以独立于使用它的客户变化。 | 旅游出行方式 | 影票打折方案 |
模板方法模式 | 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤。 | 固定流程 | 利息计算模块(流程) |
访问者模式 | 表示一个作用于某对象结构中的各个元素的操作。访问者模式让你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 | 同一事物不同处理 | 员工数据汇总模块 |
面向对象设计原则
名称 | 定义 |
---|---|
单一职责原则 | 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 |
开闭原则 | 软件实体应当对扩展开放,对修改关闭 |
里氏代换原则 | 所有引用基类的地方必须能透明地使用其子类的对象 |
依赖倒转原则 | 高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象 |
接口隔离原则 | 客户端不应该依赖那些它不需要的接口 |
合成复用原则 | 优先使用对象组合,而不是继承来达到复用的目的 |
迪米特法则 | 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位 |
UML图
统一建模语言(UML, Unified Modeling Language)是一个通用的可视化建模语言,不同于编程语言,它通过一些标准的图形符号和文字来对系统进行建模。用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。是一套总结了以往建模技术的经验并吸收了当今最优秀成果的标准建模方法。
类的UML图示
可见性为: - private ······ # protected ······ + public
例如:
类之间的关系
关系名称 | 关系 | 连线方式 |
---|---|---|
关联 | 类与类之间有联系(单项或双向) | 带箭头的实线 |
聚合 | 整体与部分的关系(可独立) | 带空心菱形的直线 |
组合 | 整体与部分(同生共死) | 带实心菱形的直线 |
依赖 | 类的方法使用另一个类的对象作为参数 | 带箭头的虚线 |
泛化 | 父类与子类(就是继承) | 带空心三角形的实线 |
实现 | 类实现了接口 | 带空心三角形的虚线 |
【学习笔记】软件设计模式(一)基本概念与归纳总结相关推荐
- 【学习笔记】 科目一之概念篇
[学习笔记] 科目一之概念篇 概念题方法 1)抓重点:科目一设计知识范围太广,不要妄想所有知识点都复习到,这是不可能的,我们的目标是45分几个而不是考高分,复习时间有限,所以要学会抓重点,比如法律条文 ...
- SDN软件定义网络 学习笔记(1)--基本概念
SDN软件定义网络 学习笔记(1)--基本概念 1. 定义 2. 提出背景 3. 体系结构 1. 定义 软件定义网络(Software Defined Network,SDN),顾名思义,SDN 与传 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...
- 《自控》学习笔记一——自动控制的一般概念(一)
<自控>学习笔记一--自动控制的一般概念(一) 引言 自动控制理论发展简史 自动控制概念 基本控制方式 开环控制 闭环控制 复合控制 控制系统示例 负反馈原理 控制系统的组成 控制系统组成 ...
- 操作系统学习笔记-01-操作系统的概念(定义),功能和目标
操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念(定义),功能和目标 文章目录 1-操作系统的概念(定义),功能和目标 1.1常见的操作系统 1.2概念(定义) 1.3-操作系统的 ...
- 操作系统学习笔记-2.1.5线程概念和多线程模型
操作系统学习笔记-2019 王道考研 操作系统-2.1.5线程概念和多线程模型 文章目录 5线程概念和多线程模型 5.1知识概览 5.2 什么是线程?为什么要引入线程? 5.3引入线程及之后,有什么变 ...
- ROS机器人操作系统学习笔记(一)--基本概念
ROS机器人操作系统学习教程(一)–基本概念 1. 基本概念 1.1 ROS背景 机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便.功 ...
- 【学习笔记】设计模式-原型模式/克隆模式(Prototype)
文章目录 0 设计模式 1 原型模式 2 实现思路 2.1 浅克隆 2.2 深克隆 3 需要的类 4 具体实现 4.1 浅克隆 4.2 深克隆 5 思维导图 6 示例源码地址 最后 0 设计模式 不了 ...
最新文章
- 什么是python全栈
- 自适应激活函数 ACON:统一ReLU和Swish的新范式
- 大学计算机基础课程报告python-Python程序设计习题解析(大学计算机基础教育规划教材)...
- T511K表之工资常量SIINS的用途
- QT学习笔记(二):QT MinGW 和 MSVC 编译方式
- PyTorch小案例二
- Mysql一直显示等待中_Mysql中的各种timeout
- python基础入门笔记_Python基础入门笔记:函数
- python中判断对象是否可迭代
- 【基础教程】基于matlab图像融合总结【含Matlab源码 055期】
- 批量下载wsdl文件
- 资源 | 最新版区块链术语表(中英文对照)2019-1.14
- 换种方式实现3级联动
- 微信小程序实现发送短信的功能(发送短信)
- Algorithm:三数之和为0
- 怎么用python爬豆瓣_完全小白篇-用python爬取豆瓣影评
- java集合框架学习笔记
- python之字符串及操作相关知识
- git更新失败出现向下箭头
- SVN使用教程:一:安装及使用
热门文章
- Ubisoft Connect失去连接解决办法
- php没解析成功,php没有解析怎么办
- 国内人脸识别研究现状
- 【s32k】s32k14x系列(1)——开发环境搭建
- ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST
- Windows 技术篇-最新win10系统下查看热键被哪个程序占用,windows10系统查看占用快捷键的所有程序
- IDEA 快捷键占用问题
- Spy++ 彻底删除流氓广告底层文件!!告别杂乱页面生活!!
- 用uni-app写一个简单的豆瓣电影微信小程序
- 乱斗二次元服务器维护,乱斗二次元独家礼包