Java设计模式之七大原则详解

一、设计模式的重要性
设计模式是对反复出现的问题所提出的解决方案,比如说当一个软件开发完后假设客户又提出新功能怎么办?(设计模式的扩展性),假设员工离职你来接受怎么办?(设计模式的可维护性),在开发过程中,程序员面临着耦合性,内聚性,可维护性,扩展性,重用性,灵活性等多方面挑战,用设计模式就是为了让软件更好

  1. 代码重用性(相同的功能,不用多次编写)
  2. 可读性(编码的规范,便于其他程序员的理解)
  3. 可扩展性(增加新的功能时,非常的方便)
  4. 可靠性(再增加代码时,对原来的功能没有影响)
  5. 是程序出现高内聚,低耦合

二、设计模式的七大原则

  • 单一原则
  • 接口隔离
  • 里氏替换
  • 依赖倒转
  • 开闭原则
  • 迪米特法则
  • 合成复用

三、职责解析

  • 单一职责一个类只负责一件事情,比如说我们的有两个DAO,一个是UserDAO另一个是OrderDAO,UserDAO就只负责用户方面的代码处理,OrderDAO就只负责订单方面的处理。
    注意事项: 1)降低类的耦合度,一个类只负责一项职责。 2)提高类的可读性,可维护性 3) 降低变更产生的风险 4) 通常情况下我们都应该遵守单一原则,只有在逻辑足够简单,才能够违反单一原则;类中的方法极其少,可以在方法级别保持单一原则。

  • 接口隔离:客户端不应该依赖他所不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上

Java设计模式之七大原则详解比如classA通过Interface1依赖classC实现方法1和方法2,但是Interface1对于classA不是最小接口他必须要实现其他的她并不需要的方法,所以按照隔离原则我们应该将Interface1拆分成两个接口,classA和classB分别实现他们所需要的方法,也就是采用了接口隔离的原则
Java设计模式之七大原则详解

  • 依赖倒置:高层模块不应该依赖底层模块,二者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象;说白了依赖倒置的中心思想就是面向接口编程;使用接口和抽象类的目的是指定好规范,把展示的细节交给实现类去完成
    依赖关系的三种传递方式:1)构造方法传入 2)setter方法传入 3)接口传递
    注意事项和细节:底层模块尽量有抽象类或者接口,或者两个都有,程序的稳定性更好,继承时尽量遵循里氏替换原则

  • 里氏替换:子类尽量不要重写父类中的方法,继承让两个类中的耦合度增强了,可以通过 聚合,组合,依赖等方法解耦。在实际编程中我们常常通过重写父类的方法来完成新的功能,但是这样会导致体系的复用性比较差。通常做法是父类和子类都继承一个基类,把原来的继承关系去掉,通过依赖,聚合,组合的方式代替

  • 开闭原则:开闭原则是编程中最基础最重要的原则,模块函数应该对扩展开放(提供方),对修改关闭(使用方),当软件需要改变时尽量通过拓展软件的实体行为来发生变化,而不是通过改变已有的代码实现变化

  • 迪米特法则:一个类对其他类应该保持最少知道原则,类与类的关系越密切,耦合度就越大;对于依赖的类不管多复杂应该封装在本类中只提供对外访问的public方法,不对外泄露任何的信息;迪米特法则还有一个简单的定义:只与直接朋友通讯
    直接朋友:每个对象与其他对象都会存在耦合关系,只要两个对象之间存在耦合关系我们就称他为朋友关系。耦合的方法有很多依赖,聚合,关联等;其中我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而出现在局部变量之间的类不是直接朋友,也就是说陌生的类,最好不要以局部变量出现在类的内部
    注意事项:迪米特法则的目的是降低类的耦合,而不是要求完全没有依赖

  • 合成复原则:原则是尽量使用合成/聚合的方式,而不是继承
    Java设计模式之七大原则详解四、设计原则的核心思想

  • 找出类中那些经常变化的代码,把他们提取出来,不要和那些不经常变化的代码放在一起

  • 针对接口编程,而不是实现接口编程

  • 为了松耦合设计而努力

本文属于个人见解+视频参考,如果有不正确的请大家帮忙改正哦