【设计模式 00】六大原则

Java
375
0
0
2022-11-26

单一职责,里氏替换,依赖倒置,接口隔离,迪米特法则,开闭原则

设计模式的六大原则

参考:

1. 单一职责原则

一个类只负责一个明确的功能

优点:

  • 降低类的复杂度,提高代码可读性和可维护性
  • 降低变更时对其他功能的影响

2. 里氏替换原则

原则一:若 o1 是 C1 的一个实例化对象, o2 是 C2 的一个实例化对象,如果在使用 C1 的程序中将o1 替换为 o2 而程序行为没有发生变化,那么 C2 应该是 C1 的子类。

原则二:所有用到基类对象的地方,如果把基类对象替换成子类对象,程序行为不应该发生变化。

实现方法:

  1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;
  2. 允许子类拓展父类的方法
  3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

3. 依赖倒置原则

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

比如手机(Phone)依赖CPU,那么 Phone 就是一个高层模块, CPU 就是一的低层模块,Phone 显然不应该依赖一个具体的低层模块(如 Qualcomm865):

public class Phone {
    private Qualcomm cpu;

    Phone(){
        this.cpu = new Qualcomm();
    }

    public void printConfig(){
        System.out.println("cpu is" + this.cpu);
    }
}

不管是高通还是麒麟,都应该抽象为一个CPU类,然后各自实现,高层模块只依赖于抽象的低层模块。

实现方法:

  1. 低层模块尽量都要有抽象类或接口,或者两者都有。
  2. 变量的声明类型尽量是抽象类或接口。
  3. 使用继承时遵循里氏替换原则。

4. 接口隔离原则

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 使用多个隔离的接口,比使用单个接口要好.

接口隔离原则

5. 迪米特法则

一个对象应该对其他对象保持最少的了解。

高内聚,低耦合

6. 开闭原则

对拓展开放,对修改封闭:当系统变化时,尽量通过拓展来实现变化,而不是去修改原有代码;