设计模式01:概念
2021/5/23 18:28:02
本文主要是介绍设计模式01:概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
设计模式01
耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性
设计模式的作用:
- 代码重用性 (即:相同功能的代码,不用多次编写)
- 可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
- 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
- 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)
- 程序呈现高内聚,低耦合的特性
1.设计模式七大原则
- 单一职责原则
- 接口隔离原则
- 依赖倒转(倒置)原则
- 里氏替换原则
- 开闭原则
- 迪米特法则
- 合成复用原则
1.1 单一职责原则
一个类应该只负责一项职责
- 降低类的复杂度
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常应遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则
1.2 接口隔离原则
不应该依赖它不需要的接口
即一个类对另一个类的依赖应该建立在最小的接口上
拆分后使得每个类实现对应接口的全部方法
1.3 依赖倒转(倒置)原则
在java中,抽象指的是接口或抽象类,细节就是具体的实现类
- 高层模块不应该依赖低层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒转(倒置)的中心思想是面向接口编程
- 依赖倒转原则设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多
- 使用接口或抽象类的目的是制定规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
传递依赖:
- 接口传递
- 构造方法传递
- setter传递
注意事项:
- 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
- 变量的声明类型尽量是抽象类或接口, 这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
- 继承时遵循里氏替换原则
1.4 里氏替换原则
子类中子类可以扩展父类的功能但尽量不要重写父类的方法
在适当的情况下,可以通过聚合,组合,依赖来解决问题
原来的父类和子类都继承一个通用的基类
1.5 开闭原则
最基础、最重要的设计原则
对扩展开放,对修改关闭
用抽象构建框架,用实现扩展细节
提供方扩展开放,使用方对修改关闭
尽量通过扩展软件实体的行为来实现变化,而不是通过修改
1.6 迪米特法则
迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好
尽量将逻辑封装在类的内部。对外除了提供的public 方法,不对外泄露任何信息
只与直接的朋友通信:
当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等
1.7 合成复用原则
尽量使用合成/聚合的方式,而不是使用继承
2.UML 统一建模语言
软件系统分析和设计的语言工具
一套符号用于描述软件模型中的各个元素和他们之间的 关系,比如类、接口、实现、泛化、依赖、组合、聚合等
- 用例图(use case)
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
2.1 UML类图
描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系
可见性的符号:
- +:表示public
- -:表示private
-
:表示protected
属性的完整表示方式是: 可见性 名称 :类型 [ = 缺省值]
方法的完整表示方式是: 可见性 名称(参数列表) [ : 返回类型]
2.2 类的关系
1.关联关系:
-
单向关联:一个顾客有一个地址
-
双向关联:双方各自持有对方类型的成员变量
-
自关联:Node类包含类型为Node的成员变量
2.聚合关系:
强关联关系,整体和部分之间的关系
成员对象是整体对象的一部分,但成员对象可以独立存在
3.组合关系:
更强的聚合关系
整体对象可以控制部分对象的生命周期,没有整体也不存在部分
4.依赖关系:
耦合度最弱的一种关联,临时性:局部变量、方法的参数或者对静态方法的调用
5.继承关系:泛化关系
耦合度最大的一种关系,表示一般与特殊的关系
6.实现关系:
接口与实现类之间的关系,实现了接口中所声明的所有的抽象操作
2.3 时序图
显示对象之间交互的图
按时间顺序排列
建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
1.对象
矩形表示,命名方式:
- 对象名和类名 loginServiceObject:LoginService
- 只显示类名,为一个匿名类 :LoginService
- 只显示对象名, loginServiceObject:
对象置于时序图的顶部说明在交互开始时对象就已经存在了;
如果对象的位置不在顶部, 表示对象是在交互的过程中被创建的
2.生命线
垂直的虚线
表示时序图中的对象在一段生命周期内存在
每个对象底部中心的位置都带有生命线
3.消息
两个对象之间的单路通信. 从发送方指向接收方
这篇关于设计模式01:概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?