面向对象开发的准测:SOLID

目录

一、SRP(单一责任原则)

二、OCP(开放/封闭原则)

三、LSP(Liskov替换原则)

四、ISP(接口隔离原则)

五、DIP(依赖转置原则)


SOLID不是一个原则的名字,而是SRP、OCP、LSP、ISP、DIP5个准则的缩写,接下来将简要讲述这5个准则的含义以及如何在开发中维护准则。

一、SRP(单一责任原则)

一个类只能做一件事情,不应该有多于一个变化使ADT被修改。若ADT承担了多个责任,那么应该将这个ADT拆分。

一个类如果承担了多个责任,引入额外的包,占据资源,导致频繁的重新配置、部署等,还有让后续的维护和拓展变困难。

一个反例: 

二、OCP(开放/封闭原则)

开放指的是面对扩展的开放,模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化。

封闭是面对修改的封闭,虽然要拓展,但是不应该修改原代码本身,扩展模块行为的一般途径是修改模块的内部实现。

关键的解决方案是抽象技术:继承和委派。

反例:

 原先要使用不同的Server必须修改Server内方法,而使用接口或者抽象类后,可以通过继承接口或抽象类构造新的子类实现扩展。

也可以参照Strategy、Visitor等设计模式,看到通过委派拓展功能而不改变ADT本身。

三、LSP(Liskov替换原则

简单来说就是子类型必须可以替换原类型,派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异。

想要具体实现该原则,需要保证如下几点:

对于ADT来说:

1.子类型可以增加方法,但是不可以删。

2.子类型不可以修改父类型的不变量。

3.子类型需要实现父类型的抽象方法。

4.子类型重写的方法必须要有相同的返回值,或者是满足协变的返回值。

5.子类型重写的方法必须使用相同的参数,或者满足抗变的参数。

6.子类型重写的方法不可以抛出更多的异常,只能抛出父类异常的子类异常或者不抛出。

对于ADT内的方法来说:

1.需要有更强的不变量。

2.需要更弱的前置条件。

3.需要更强的后置条件。

四、ISP(接口隔离原则)

不能强迫客户端依赖于它们不需要的接口:只提供必需的接口。

五、DIP(依赖转置原则)

抽象的模块不应依赖于具体的模块,具体应依赖于抽象。
表现为:上层的代码应该调用接口或者抽象类来调用底层方法,而不是直接调用某个具体类。委派功能时应该通过接口建立联系。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值