一、设计模式
1、什么是设计模式
设计模式是一套被反复使用、多数人知晓、代码设计经验的总结。
2、目的
设计模式的目的是为了让软件具有更好的代码重用性、可读性、可扩展性、可靠性,同时使程序间出现高内聚、低耦合的特性。
3、七大原则
(1)单一职责原则(Single-Responsibilitiy Principle(SRP))。 简单的说就是 对于一个类A,其只负责某项职责(功能),并不是指一个类只有一个方法。 比如某个人,其兼职了几个不同的工作,按照单一职责原则,每个工作应该都由一个专门的人来完成。
(2)接口隔离原则(Interface Segregation Principle(ISR))。 简单的说就是 对于一个类A,不应该依赖于不需要的接口,即类间的依赖关系需建立在最小的接口上。 比如,一个接口里面有10个抽象方法,当类A需要使用某个方法时,需要实现该接口,并重写10个方法。此时其余的9个方法,类A并不需要,按照接口隔离原则,可以将这个方法单独的抽出来写成一个接口B,然后让类A去实现接口B,此时类A只需重写一个方法即可。
(3)依赖倒置(倒转)原则(Dependence Inversion Principle(DIP))。 简单的讲 依赖倒置原则的中心思想是面向接口编程,高层模块不依赖与低层模块,且二者均依赖于抽象,其抽象不依赖于细节,应该细节依赖于抽象。 其中: 抽象指的是 接口 或者 抽象类, 细节指的是 具体的实现类。
【举例:普通的写法】
class Teacher{
}
class Hospital{
// 高层依赖于低层
public void check(Teacher teacher){ // 采用具体的实现类,只能传入Teacher类的实例
}
}
【举例:面向接口编程】
interface Person{
}
class Teacher implements Person{
}
class Doctor implements Person{
}
class Hospital{
// 高层不依赖于低层,而依赖于抽象
public void check(Person person){ // 采用接口,方便复用,可以传入Teacher类或Doctor类的实例
}
}
(4)里氏替换原则(Liskov Substitution Principle(LSP))。 简单的讲就是 任何父类能出现的地方,子类一定能出现,且子类可以扩展父类的功能,但是不能改变父类原有的功能。即继承时尽量不要重写父类的方法。 比如一个父类A,子类B,且子类B重写了父类A的某个方法,在一个类C中需要使用父类A的方法时,若此时传入的是子类B,则程序可能会出错。
(5)开闭原则(Open-Close Principle(OCP),核心原则)。 简单的讲就是 软件对扩展开放(代码提供方),对修改关闭(代码使用方),即对代码功能进行扩展时,不能修改原有代码。使用抽象类与接口对代码进行重构,当扩展代码功能时,实现抽象类或接口并实现相关方法即可。
(6)迪米特法则(Law of Demeter(LOD))。 又称为最小知道法则(Least Knowledge Principle (LKP)) 简单的说就是 一个实体应尽量少的与其他实体之间发生相互作用(降低耦合),使系统功能模块相互独立。一个对象应该对其他对象有最少的了解,即不管你内部有多复杂,我能调用你的方法就行。 比如:一个类A的某个方法中出现某个类B,且对类B做了一些无关类A的操作,按照迪米特法则,需要将这些操作封装在类B的一个方法中,然后在类A中调用该方法。
(7)合成复用原则。 简单的说就是 尽量使用合成或者聚合的方式,少用继承。
4、常用设计模式分类(23种)
(1)三大类:
创建型模式(五种),
结构型模式(七种),
行为型模式(十一种) (2)创建型模式:(强调对象创建时,如何去更好的设计) 工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式。
(3)结构型模式:(设计更好的软件结构) 适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
(4)行为型模式:(设计更好的方法调用模式) 策略模式,模板方法模式,观察者模式,迭代器模式,责任链(职责链)模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。
二、UML图
1、什么是UML图
(1) Unified Modeling Language,统一建模语言,用来对软件密集系统进行可视化建模的一种语言。简单的说就是 帮助软件开发人员记录、交流的一个图形化语言。 (2)UML图本身是一组符号的规定,用于描述软件模型间各元素以及各元素间的联系。
2、UML分类
(1)用例图 (2)静态结构图:类图,对象图,包图,组件图,部署图。 (3)动态行为图:交互图(时序图、协作图)、状态图、活动图。
3、类图(常用)
(1)用于描述类与类之间的关系。UML的核心。 (2)元素:类、接口。 (3)关系:依赖、继承(泛化)、实现、关联、聚合、组合等。 (4)依赖: 若在某个类A中使用到类B,且若没有类B,类A编译会报错,则称A与B之间有依赖关系。 线条表示:虚线普通箭头("<",">")。 (5)继承(泛化): 属于依赖关系的一种特例,如果类A继承了类B,则称A与B间存在泛化关系。 线条表示:实线空心三角箭头。 (6)实现: 属于依赖关系的一种特例,如果类A实现了类B,则称A与B间存在实现关系。 线条表示:虚线空心三角箭头。 (7)关联: 属于依赖关系的一种特例,如果类A与类B间有联系。比如类B作为类A的成员变量,则称A与B间存在关联关系。 线条表示:实线(直线),普通箭头("<",">")可选。如果强调方向,则加一个普通箭头。否则只需要一条实线。 (8)聚合: 属于关联关系的一种特例,如果类A与类B间可以分离且可以独立存在,则称A与B间存在聚合关系。比如:人与衣服,可以分离,则为聚合关系。 线条表示:实线空心菱形箭头。 (9)组合: 属于关联关系的一种特例,如果类A与类B间不可以分离,则称A与B间存在组合关系。比如:人与人头,不可分离,则为组合关系。 线条表示:实线实心菱形箭头。
注: eclipse下生成Java类图和时序图,生成UML图,参考地址: https://blog.csdn.net/qq_21383435/article/details/79890884

在线编辑UML图的工具(ProcessOn):https://www./
|