- 描述
- 三大类型
- 设计模式七大原则
- 1. 单一职责原则(Single Responsibility Principle)
- 2. 接口隔离原则(Interface Segregation Principle)
- 3. 依赖倒转(倒置)原则(Dependence Inversion Principle)
- 4. 里氏替换原则(Liskow Substitution Principe):
- 5. 开闭原则(OCP原则,核心目的)(Open Closed Principle)
- 6. 迪米特法则(最少知道原则)(Demeter Principle)
- 7. 合成复用原则(Composite Reuse Principle)
- UML(Unified Modeling Language)
- 标签翻译:
- 类图: 是描述类与类之间的关系,是UML中的核心。
- 安装
核心目的:是为了解决软件设计中普遍存在(反复出现)的各种问题。
最终目的:是让程序:
1)可重用性:相同代码不用多次编写
2)可读性:编程规范化,其它程序员也可一读就懂
3)可扩展性:需要新增功能时,非常方便,也叫可维护性
4)可靠性:新增功能,原有功能不会被影响到
5)使程序低耦合,高内聚(根本目的)
四人帮把设计模式分为了三种类型,(共23种)
- 创建型模式:单例模式,抽象工程模式,原型模式,建造者模式,工厂模式
- 结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
- 行为型模式:模板方法模式,命令模式,访问者模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释权模式,状态模式,策略模式,职责链模式(责任链模式)
一个类只负责一项职责,一个方法只负责一个功能。主要是降低类的复杂度,提高可读性,可维护性。
2. 接口隔离原则(Interface Segregation Principle)客户端不应该依赖它不需要的接口,既一个类对另一个类的依赖应该建立在最小接口上。
3. 依赖倒转(倒置)原则(Dependence Inversion Principle)依赖抽象而不是实现,核心就是面向接口编程。底层模块尽量要有抽象类或接口,提供缓冲层,提高稳定性,扩展性。
4. 里氏替换原则(Liskow Substitution Principe):子类尽量不要重写父类的方法(多态容易出错,适当的情况下,可以通过聚合,组合,依赖来解决问题)。降低类之间的耦合。
5. 开闭原则(OCP原则,核心目的)(Open Closed Principle)对扩展开放(提供方),对修改关闭(使用方)。通过扩展(新类,新方法),而不是修改(原有代码)。
6. 迪米特法则(最少知道原则)(Demeter Principle)一个对象应该对其它对象保持最少的了解,比如A类依赖B类,B类的逻辑不应该在A类中实现,而是应该在B类中实现封装成方法,A类直接调用B类方法,A类尽可能少的依赖(知道)B类。
7. 合成复用原则(Composite Reuse Principle)尽量使用合成/聚合的方式,而不是使用继承。减低耦合性,动态引用,而不是父类有什么,子类就一定要有什么。
UML(Unified Modeling Language)统一建模语言: 是一种用于软件系统分析和设计的语言工具(设计模式中经常用到类图,因此暂时整理到此处)。
可分为:
- 用例图(use case)
- 静态结构图:类图,对象图,包图,组件图,部署图
- 动态行为图:交互图(时序图和协作图),状态图,活动图
Note:注释
Class:类,可添加属性和方法
Interface:接口
+:表示public
-:表示private
#:表示protected
属性:可见性 名称 : 属性 [= 值]
+ name : String = 你好
方法:可见性 名称(参数列表) [:返回值]
- say(): void类图: 是描述类与类之间的关系,是UML中的核心。
类之间的关系:
- 依赖(Dependency):只要在A用到了B类,就说他们之间存在依赖关系(可以是成员属性,方法参数,方法返回值,方法中使用到的)
用虚线箭头表示 - 关联(Association):依赖特例。类与类之间的联系,导航性。当向1对1(A只存在一个B关系,A指向B),或双向1对1(同时B只存在一个A关系),也可自关联,自己指向自己。
用实线箭头表示 - 泛化(继承)(Generalization):依赖特例。A继承B,A和B存在泛化关系
用实线空心三角形表示 - 实现(Realization):依赖特例。B是接口,A实现B,说明A类实现B
用虚线空心三角形表示 - 聚合(Aggregation):(关联特例)整体和部分的关系(可分离),比如电脑由鼠标,显示器,鼠标组成(成员属性对象,后面通过set赋值)(聚合到电脑,鼠标指向电脑)
用实线空心菱形表示 - 组合(Composite):(关联特例)整体和部分的关系(不可分离),比如人和人脑(成员属性对象,直接new出来的)(组合到人,人脑指向人)
用实线实心菱形表示
idea(感觉不好用):安装plantMUL插件(File -> Settings -> Plugins 搜索 PlantUML 安装)
本地需安装graphviz,并配置全局环境:https://graphviz.org/download/



