一、概念
设计模式:(Design pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。
二、设计模式原则:
-
单一职责原则(Single Responsibility Principle):一个类应该只有一个发生变化的原因。每个类的功能尽可能的单一,只干一件事情,如果承担的职责太多就需要将类进行拆分。
-
开闭原则(Open Closed Principle):对扩展开放,对修改关闭。为了使程序的扩展性好,易于维护和升级,在扩展的时候,尽量不要修改原代码,而是要了扩展原代码,比如接口实现。
-
里氏替换原则(Liskov Substitution Principle):任何基类可以出现的地方,子类一定可以出现。个人理解是基类使用的地方可以用子类替换掉,且不会影响功能。因此该原则还要求:子类对父类的方法尽量不要重写和重载,如果给重写了,运行的时候就破坏了替换原则。
-
接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
-
依赖倒置原则(Dependence Inversion Principle):上层模块不应该依赖底层模块,它们都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
上层的意思就是依赖方,例如一个人出远门需要依赖交通工具;
下层就是被依赖方,如交通工具。交通工具包括大巴、火车、飞机、高铁等。
此时如果上层直接依赖底层实体工具,以后新添加一个出行工具就要动上层依赖方代码,此时我们可以给所有下层的交通工具抽象出一个接口vehicl,上层依赖vehicl接口,这样底层代码扩展不会影响上层代码功能。
- 迪米特法则(最少知道原则)(Law of Demeter):只与你的直接朋友交谈,不跟“陌生人”说话。一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
记忆要点:SOLID(坚固的),分别是上面前5个单词的首字母。
三、设计模式分类:
- 创建型模式:创建型设计模式主要解决“对象的创建”问题,共五种:
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
记忆方法:工厂里有个孤单的建造者在建圆形大楼。
- 结构型模式:结构型设计模式主要解决“类或对象的组合或组装”问题,共七种:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
记忆方法:代理人觉得这座桥的外观不好看,需要再装饰下,可以加一组圆圆的桥洞,再配上几个桥墩。
- 行为型模式:行为型设计模式主要解决的就是“类或对象之间的交互”问题,共十一种:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
参考文章:
快速记忆23种设计模式
对“依赖倒置原则”的理解