资料学习整理自:B站尚硅谷
设计原则
设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式设计的依据)
1、单一职责原则
基本介绍
对类来说,即一个类应该只负责一项职责。
比如:一个类里面有两个具体业务的不同方法,方法一修改时,可能会影响到方法二,所以此时应该拆分为两个类。
细节
目的与优点:
1)降低类的复杂度,一个类只负责一项职责;
2)提高类的可读性和可维护性;
3)降低变更引起的风险。
通常情况下,我们应担遵守单一职责原则;
什么情况可以不遵守单一职责原则:
1)业务逻辑足够简单,代码量足够少;
2)类中的方法数量足够少,可以在方法级遵守单一职责原则。
2、接口隔离原则
Interface Segregation Principle
基本介绍
一个类对另一个类的依赖,应该建立在最小的接口上。
比如:类A需要使用类B实现的接口1上的部分方法,类C需要使用类D实现的接口1上的部分方法,此时应该将接口1拆分成颗粒度更小的接口单元。
未遵循接口隔离原则:
应该调整为:
3、依赖倒置原则
Dependence Inversion Principle
基本介绍
1)高层模块不应该依赖底层模块,二者都应该依赖其抽象
2)抽象不应该依赖细节,细节应该依赖抽象
3)依赖倒置(倒转)的中心思想是面向接口编程
4)依赖倒置原则的设计理念:
- 相对于细节的多边形,抽象的东西更为稳定;
- 以抽象为基础搭建的架构比以细节为基础搭建的架构更为稳定;
- 在java中,抽象指的是接口和抽象类,细节指的是具体的实现类。
5)使用接口或抽象类的目的是制定规范(设计),而不涉及任何具体的操作,把展现细节的任务交给实现类完成。
依赖关系传递的三种方式
1)通过接口的传递实现依赖
//开关
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象类
}
//电视
interface ITV{ //ITV接口,可以涵盖各种电视
public void play();
}
//具体实现
class OpenAndClose implements IOpenAndClose{
public void open(ITV tv){
tv.play;
}
}
// main >>> 给实现类传入具体的电视
2)通过构造方法实现依赖
//开关
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象类
}
//电视
interface ITV{ //ITV接口,可以涵盖各种电视
public void play();
}
//具体实现
class OpenAndClose implements IOpenAndClose{
ITV tv;
public OpenAndClose(ITV tv){
this.tv = tv;
}
public void open(){
this.tv.play;
}
}
// main >>> 给实现类传入具体的电视
3)通过setter方法实现传递
//开关
interface IOpenAndClose{
public void open(ITV tv);//抽象方法接收抽象类
public void setTV(ITV tv);//set属性
}
//电视
interface ITV{ //ITV接口,可以涵盖各种电视
public void play();
}
//具体实现
class OpenAndClose implements IOpenAndClose{
ITV tv;
public void setTV(ITV tv){
this.tv = tv;
}
public void open(){
this.tv.play;
}
}
// main >>> 给实现类传入具体的电视
4、里氏替换原则
Liskov Substitution Principle
基本介绍
1)所有引用基类的地方必须能透明地使用其子类的对象;
2)在使用继承时,在子类中尽量不要重写父类的方法;
3)继承实际上增强了两个类之间的耦合性,适当情况下,可以通过聚合、组合、依赖或共同继承一个更高级的类来解决问题。
总结:描述的就是子类继承父类时,不要轻易去修改父类的方法,这样会导致父类的方法变得不透明。当父类的方法修改时,子类重写的方法将得不到改变。
5、开闭原则
Open Closed Principle
基本介绍
1)一个软件实体如类、模块和函数应该是对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
2)当软件需要变化时,尽量通过 ,而不是通过修改已有的代码来实现变化。
3)编程中遵循其他原则,以及使用设计模式的目的就是为了遵循开闭原则。
6、迪米特法则
Demeter Principle 最少知道原则
基本介绍
1)一个类对自己依赖的类知道的越少越好。
2)只与最直接的朋友通信:
直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多:依赖、关联、组合、聚合等。
- 我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友;
- 出现在局部变量中的类不是直接的朋友(也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。)
注意事项和细节
1)迪米特法则的核心是降低类之间的耦合;
2)由于每个类都减少了不必要的依赖,因此迪米特法则指示要求降低类之间(对象之间)耦合关系,并不是要求完全没有依赖关系。
总结:只与最直接的朋友通信!如果目标不是最直接的朋友,那就尝试把它变成最直接的朋友!
7、合成复用原则
Composite Reuse Principle
基本介绍
尽量使用合成/聚合的方式,而不是使用继承
合成:
1)B类以参数的形式传入A类;
2)B类创建A类的实例
聚合:
通过setter方法,把A类传入B类
设计原则核心思想
1)找出应用中需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
2)针对接口编程,而不是针对针对实现编程;
3)为了交互对象之间的松耦合设计而努力。