爬梯:七大设计原则

资料学习整理自:B站尚硅谷

设计原则

设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式设计的依据)

1、单一职责原则

基本介绍

对类来说,即一个类应该只负责一项职责。

比如:一个类里面有两个具体业务的不同方法,方法一修改时,可能会影响到方法二,所以此时应该拆分为两个类。

细节

目的与优点:

1)降低类的复杂度,一个类只负责一项职责;

2)提高类的可读性和可维护性;

3)降低变更引起的风险。

通常情况下,我们应担遵守单一职责原则

什么情况可以不遵守单一职责原则:

1)业务逻辑足够简单,代码量足够少;

2)类中的方法数量足够少,可以在方法级遵守单一职责原则。

2、接口隔离原则

Interface Segregation Principle

基本介绍

一个类对另一个类的依赖,应该建立在最小的接口上。

比如:类A需要使用类B实现的接口1上的部分方法,类C需要使用类D实现的接口1上的部分方法,此时应该将接口1拆分成颗粒度更小的接口单元。

未遵循接口隔离原则:

爬梯:七大设计原则_第1张图片

应该调整为:

爬梯:七大设计原则_第2张图片

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类的实例

爬梯:七大设计原则_第3张图片

聚合:

通过setter方法,把A类传入B类

爬梯:七大设计原则_第4张图片

设计原则核心思想

1)找出应用中需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;

2)针对接口编程,而不是针对针对实现编程;

3)为了交互对象之间的松耦合设计而努力。

你可能感兴趣的:(思想协议,设计模式)