前言
在学习设计模式之前,我们需要先了解设计原则,依据设计原则衍生出23种常见的设计模式,在做顶层架构设计的时候须依据设计原则去做架构设计,遵照高内聚、低耦合,单一职责等原则有意识的对后期的业务架构设计支撑扩展和降低耦合影响。
![](https://img-blog.csdnimg.cn/img_convert/748f75f0e0dd4066a299a042dbf776de.png)
一、单一职责原则(Single Responsibitity Principle)
单一职责原则的定义描述非常简单,也不难理解。主要目标为高内聚,低耦合,一个类只负责完成一个职责或者功能。也就是说在类的设计中 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。保证负责尽量功能职责单一的模块设计。
如何判定一个类的职责是否单一(经验):
类中的代码行数、函数、属性过多
类依赖的其他类过多
私有方法过多
类中大量的方法总是操作类中的几个属性
![](https://img-blog.csdnimg.cn/img_convert/7c785c44986f4d48b8fad2ab4bbbf2b5.png)
二、开放封闭原则(Open Close Principle)
概念对类或者对象的操作扩展开放对修改关闭的原则,源码中很多采用这种设计原则,多用抽象对象。开闭原则是所有设计模式的核心。顶层设计要具备的意识抽象意识、封装意识、后期扩展意识。
优点:
新老逻辑解耦,需求发生改变不会影响老业务的逻辑
改动成本最小,只需要追加新逻辑,不需要改的老逻辑
提供代码的稳定性和可扩展性
![](https://img-blog.csdnimg.cn/img_convert/2e673151774a498f8bf581bfe9d29ad4.png)
三、里氏替换原则(Liskov Substitution Principle,LSP)
原则提出者论文原话:
她在论文中提到:如果S是T的子类型,对于S类型的任意对象,如果将他们看作是T类型的对象,则对象的行为也理应与期望的行为一致。
关于替换,主要体现在方法的多态方式的实现。
替换的前提是面向对象语言所支持的多态特性,同一个行为具有多个不同表现形式或形态的能力。
简单说就是当我的一个方法的参数是一个接口类型时,这个方法可以接收所有实现过这个接口的实现类
与期望行为一致的替换:
在不了解派生类的情况下,仅通过接口或基类的方法,即可清楚的知道方法的行为,而不管哪种派生类的实现,都与接口或基类方法的期望行为一致。
![](https://img-blog.csdnimg.cn/img_convert/60979113ae3c4dfd9e014bf2c9648651.png)
四、接口隔离原则(Interface Segregation Principle)
<<代码整洁之道>>作者罗伯特 C·马丁 为 “接口隔离原则” 的定义是:客户端不应该被迫依赖于它不使用的方法(Clients should not be forced to depend on methods they do not use)。
该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上
概念:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
接口隔离原则的优点:
将胖接口拆分成粒度小的接口,可以提高系统的灵活性和可维护性。
使用多个专门的接口,还能够体现出对象的层次。
能够减少项目工程中的冗余代码。
![](https://img-blog.csdnimg.cn/img_convert/5c05f62559b9408788e1d6749c9fd1fb.png)
五、依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则是罗伯特 C·马丁于1996年在C++Report上发表的文章中提出的。
依赖倒置原则(Dependence Inversion Principle,DIP)是指在设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
依赖倒置原则想要表达的是: 由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。
![](https://img-blog.csdnimg.cn/img_convert/14618c8f3db94c7d885069a613a5d98b.png)
![](https://img-blog.csdnimg.cn/img_convert/f196fb5de2b54fb898a06648ab03e367.png)
六、迪米特法则(Least Knowledge Principle)
迪米特法则又叫最少知识原则(LKP:Least Knowledge Principle ),指的是一个类/模块对其他的类/模块有越少的了解越好。
简单来说迪米特法则想要表达的思想就是: 不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。
![](https://img-blog.csdnimg.cn/img_convert/2b566ae4bc01494992accdb84b0a9edb.png)
结语:
以上设计原则,希望对大家的架构意识有一些帮助,后面我会拆分具体的设计模式进行更详细的讲解,过程中有疑问欢迎讨论分享。