1.设计模式概念
1.1 什么地方可以用到设计模式
面向对象(OO)=>功能模块[设计模式+算法(数据结构)]=>框架[使用多种设计模式]=>架构[服务器集群]
复制代码
1.2 使用设计模式的好处
-
使用设计模式,软件具有很好的可扩展性(可以增加新的功能)
-
使用开发模式,具有很好的维护性(可读性、规范性)
1.3 设计模式的目的
-
设计模式是为了让程序,具有更好的代码重复性、可读性(编程规范性)、可扩展性(可维护性)、可靠性、是程序呈现高内聚,低耦合的特征。(模块内部逻辑关系非常紧密,模块与模块之间的关系非常的松散)
-
分享金句:"懂了设计模式,你就懂了面向对象分析和面向对象设计(OOA/OOD)的精要"。
-
C++老手与 C++新手的区别就是,前者手背上有很多的伤疤。
2.设计模式的七大原则
-
设计模式原则,其实就是程序员在编译时,应当遵守的原则,也就是各种设计模式的基础(即:设计模式为什么这样设计的依据)
设计模式常用的七大原则:
-
单一职责原则
-
接口隔离原则
-
依赖倒转(倒置)原则
-
里氏替换原则
-
开闭原则
-
迪米特原则
-
合成复用原则(在一些地方不写这个原则)
2.1 单一职责原则
-
对于类来说,即一个类应该只负责一项职责。如果 A 类负责两个不同的职责:职责 1、职责 2。当职责 1 发生变化而改变 A 时,可能会对职责 2 造成影响使职责 2 运行错误,所以需要将类 A 的粒度分解为 A1、A2。
-
如果再类中没有满足单一职责原则,在一个类的方法中遵守单一职责原则也是可以的(交通工具)
-
标准的单一职责原则,是在类的级别上进行拆分,而不是方法级别。
-
通常情况下,我们要遵守单一职责原则,只有当逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中的方法数量足够少,可以在方法级别保持单一职责原则。
-
优秀的代码中使用类来区分多个分支,而不使用 if...else if()....else(耦合度高)
2.2 接口隔离原则
-
客户端不应该依赖它不需要接口,即一个类对另一个类的依赖应该建立在最小的接口上。
-
处理方式:将接口 Interface 拆分为独立的几个接口,类 A 与类 C 分别于他们需要的接口建立依赖关系。这就是使用的接口隔离原则。
没有使用接口隔离原则时的实现类图:(此时 A、C 要实现接口里的所有方法)
使用接口隔离原则时的实现类图:(此时将接口进行了拆分,A 此时只需要实现它要使用的方法对应的接口即可,而不用将接口中的方法全部实现)
2.3 依赖倒转(倒置)原则
-
在 Java 中,抽象是指接口或者抽象类,细节是指具体的实现类。
-
高层模块不应该依赖低层模块,二者都应该依赖其抽象(接口、抽象类)。
-
抽象类不应该依赖细节,细节应该依赖抽象类。
-
依赖倒倒转(倒置)的中心思想是面向接口编程。
依赖倒转原则是基于这样的设计理念:
-
相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比细节为基础的架构要稳定的多。
-
使用接口或者抽象类的目的是制定好规范,