设计模式-OOP七大原则

OOP七大原则

开闭原则(Open-Closed Principle ,OCP)

定义:对拓展开放,对修改关闭

问题的由来:在软件的生命周期的,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧的代码引入错误。

解决办法:当软件需要发生变化的时候,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

为什么要遵循开闭原则

  1、只要是面向对象的编程,在开发过程中都会强调开闭原则

  2、是最基础的设计原则,其他五个设计原则都是开闭原则的具体形态

  3、可以提高代码的复用性

  4、可以提高代码的可维护性

单一职责原则(Single Responsibility Principle,SRP)

定义:如果一个类具有多个职责,应当将对象解耦,提高内聚,分别创建一些类去一 一完成这些职责,

核心:高内聚、低耦合。

优点:

  1、降低类的功能复杂度

  2、提高系统的可维护性

  3、变更风险低

里氏替换原则(Liskov Substitution Principle ,LSP)

定义: 子类对象能够替代程序中父类对象出现的任何地方,并且保证原来的程序的逻辑行为不变及正确性不被破坏

里氏替换至少包含一下两个含义:

 1、如果继承是为了实现代码重用,那么共享的父类方法就应该保持不变,不能被子类重新定义。子类只能通过新添加方法来扩展功能,父类和子类都可以实例化,而子类继承的方法和父类是一样的,父类调用方法的地方,子类也可以调用同一个继承得来的一致的方法,这时用子类对象将父类对象替换掉时,当然逻辑一致,相安无事。

​ 2、如果继承的目的是为了多态,而多态的前提就是子类覆盖并重新定义父类的方法,我们应该将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当父类是抽象类时,父类就是不能实例化的,也就不存在子类替换父类实例的现象。

优点:可以大大减少程序的bug以及增强代码的可读性。

依赖倒置原则(Dependency Inversion Principle ,DIP)

定义:面向接口编程

本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,不互相影响,实现模块间的松耦合。

接口隔离原则(Interface Segregation Principle, ISP)

定义:要用各个类建立他们需要的专用接口

它包含了2层意思:

接口的设计原则:接口的设计应该遵循最小接口原则,不要把用户使用不到的方法塞进同一个接口里。如果一个接口的有方法没有被用户使用到,则说明该接口已经臃肿了,应该将其分割成几个功能专一的接口。

接口的依赖(继承)原则:如果一个接口a继承另一个接口b,则接口a相当于继承了接口b的方法,那么接口a也应该遵循上述原则:不应该包含用户不使用的方法。 反之,则说明接口a被b给污染了,应该重新设计它们的关系。

迪米特法则(Law of Demeter ,LOD)

定义:只与直接朋友交谈,不与陌生人通信

直接朋友的定义:

1)当前对象本身(this)

2)以参量形式传入到当前对象方法中的对象

3)当前对象的实例变量

4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友

5)当前对象所创建的对象

合成复用原则(Composite/Aggregate Reuse Principle ,CARP)

定义:尽量先使用组合或者内聚等关联关系来实现,其次才考虑使用继承来实现,因为java是单继承

给作者买杯咖啡吧~~~