JAVA设计模式之六大原则

参考资料

主要是对上面参考资料的总结和整理

1.单一职责:

一个类只负责一项职责。

class Terrestrial{
    public void breathe(String animal){
        System.out.println(animal+"呼吸空气");
    }
}
class Aquatic{
    public void breathe(String animal){
        System.out.println(animal+"呼吸水");
    }
}

public class Client{
    public static void main(String[] args){
        Terrestrial terrestrial = new Terrestrial();
        terrestrial.breathe("牛");
        terrestrial.breathe("羊");
        terrestrial.breathe("猪");
        
        Aquatic aquatic = new Aquatic();
        aquatic.breathe("鱼");
    }
}

2.里氏替换原则:

子类可以扩展父类的功能,但不能改变父类原有的功能。

引申含义

  1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  2. 子类中可以增加自己特有的方法。
  3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。【注意区分重载和重写】
  4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

风险:如果不遵守 可能会在某些情况下忘记了子类覆盖了父类 但仍调用那个覆盖了的方法,导致程序出错

PS:可以用final的手段强制来遵循
可以阅读这里:https://blog.csdn.net/whuslei/article/details/636618了解详细情况

3.依赖倒置原则:

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

简单来说:依赖倒置原则的核心思想是面向接口编程

风险:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

解决办法:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

4.接口隔离原则:

将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。

JAVA设计模式之六大原则_第1张图片
根据原则修改后
JAVA设计模式之六大原则_第2张图片

5.迪米特法则

一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。

6.开闭原则

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,需要面向接口编程。

你可能感兴趣的:(JAVA,设计模式)