什么是设计模式?


设计模式,一听这个名词你会想到什么?模式,既然是模式那一定就是针对某些重复出现的问题,整理出来的解决问题的模板喽~设计模式就是一个软件的设计思想,从大型软件架构出发,目的是为了升级和维护方便。

设计模式概念


设计模式是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结  ——来源于百度

每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次的重用那些已有的成功的解决方案,无须再重复相同的工作。

简单描述即:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。

为何要学习设计模式?


学习总要有个驱动力,那我们为什么要学习设计模式呢?举个栗子说明,在维护项目过程中,当遇到用户需求发生变化,出现增加或者删减,可能是一个非常简单容易实现的需求,但是由于系统当初设计的时候没有考虑到这些需求的变化,或者随着需求的累加,系统越来越臃肿,导致随便修改一处都可能造成不可预料的后果,代码的灵活性不够好,所以出现了设计模式。借用设计模式书上的一句话:如果说,数学是思维的体操,那设计模式,就是面向对象编程思想的体操。

设计模式分类


创建型模式

描述如何创建对象

结构型模式

描述如何实现类或对象的组合

行为型模式

描述类或对象怎样交互以及怎样分配职责

从宏观谈起——设计模式概述_子类

从宏观谈起——设计模式概述_子类_02

设计模式的分类

1、创建型模式

2、结构型模式

3、行为型模式

设计模式的七大原则

1、开闭原则

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。

2、里氏代换原则

(1)子类的能力必须大于等于父类,即父类可以使用的方法,子类都可以使用。

(2)返回值也是同理。假设一个父类方法返回一个List,子类可以返回一个ArrayList,如果父类方法返回一个ArrayList,子类不可以返回一个List.因为此时子类返回值的能力是比父类小的。

(3)任何子类方法可以声明抛出父类方法声明异常的子类,但是不可以声明抛出父类没有声明的异常。

3、依赖倒转原则

这个原则是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则

使用多个隔离的接口比使用单个接口要好。目的是为了降低类之间的耦合度。同样也是为了降低依赖,降低耦合。

5、迪米特法则(最少知道原则)

一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则

原则是尽量使用合成/聚合的方式,而不是使用继承。

7、单一职责原则

就一个类而言,应该只有一个引起他变化的原因,如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会影响到其他的职责,另外,把多个职责耦合到一起,也会影响复用性。