面向对象的六大设计原则(基于Volley框架分析)

本文介绍了单一职责、里氏替换、依赖倒置、开闭、接口隔离及迪米特六大设计原则,详细阐述了每种原则的概念、优缺点及其在Android Volley框架中的应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 单一职责原则

单一职责原则(Single Responsibility Principle, SRP).一个类只有一个引起它变化的原因,简单的讲就是一个类只做一件事。如果一个类有一个以上的职责,这些职责会耦合在一起,当一个职责发生变化时,可能会影响其他的职责。准守单一职责原则,每个类都有比较单一的职责,这就是高内聚,低耦合。单一职责原则的难点在于职责的划分会依靠个人的经验来界定。

在Android的Volley框架中,HttpStack只有performRequest()一个方法,它的职责是执行网络请求并返回Response。如果把Response的解析等工作也放在这个类中,那么就违背了单一职责原则。但是单一职责原则不是说类中只有一个函数,而是说这个类中的函数所做的工作是高度相关的。

优点:
- 类的复杂度降低
- 可读性提高
- 可维护性提高
- 变更引起的风险降低

缺点:
- 职责的界定依靠个人主观性

2 里氏替换原则

面向对象的语言的三大特点是封装、继承、多态。里氏替换原则就是依赖继承、多态这两大特性。里氏替换原则表示所有用基类、接口的地方都可以使用其子类来代替,也就是说确保超类所有的性质在子类中都能成立。然而又子类的地方,父类就不一定能适应了。

在Volley框架中,我们需要将定义好的Request放入到请求队列RequestQueue中, 而在RequestQueue的add()函数中,参数是StringRequest、JsonRequest等类的基类Request, 即任何父类出现的地方都可以用子类来代替。这样保证了程序的可扩展性,当有一个新的需求,如Gson解析时,只需要重新定义一个新的GsonRequest类,加入请求队列RequestQueue中就可以了。

优点:
- 基类代码共享
- 易于扩展
- 提高产品与项目的开放性

缺点:
- 继承是侵入性的。只要继承,就必须继承父类所有的属性和方法。
- 增强了耦合性。当父类中的属性或方法改变时,必须考虑子类的修改。

3 依赖倒置原则

依赖倒置原则就是要依赖于抽象,不要依赖于具体。简单的话说就是要求对抽象进行编程,不要对实现进行编程,这就降低了客户与模块之间的耦合。模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系。

还是上边Request的例子,请求队列RequestQueue的add()函数的参数是Request超类。在进行网络请求时,HttpStack有两个子类: HttpClientStack 、HurlStack, 而在定义请求队列时的参数是超类HttpStack,然后可以根据不同的版本情况选择不同的子类(实现类)。

优点:
- 可扩展性好
- 降低耦合度

4 开闭原则

开闭原则,即对扩展开放,对修改关闭。当软件发生变化时,我们应尽量通过扩展的方式来实现变化,而不是修改已有的代码。

在进行网络请求时,服务器返回的数据有不同的格式,有String类型、XML类型、Json类型、图片等等。Volley的Request符合开闭原则。Volley没有对不同的返回值修改原有的解析函数,而是扩展不同的类,如StringRequest、JsonRequest来解析不同的返回类型。

优点:
- 增加稳定性
- 增加可扩展性

5 接口隔离原则

接口是我们设计时对外提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性。
要求在接口中尽量少公布public方法,而不是建立一个庞大的臃肿的接口,容纳所有的客户端访问。
接口是对外的承诺,承诺地越少对系统开发越有利,变更的风险也就越少,同时也有利于降低成本。

优点
- 降低耦合度
- 隐藏实现细节
- 提高代码可读性

6 迪米特原则

迪米特原则又称最少知识原则,虽然名字不同,但描述的同一个原则,一个对象应该对其他对象有最少的了解。通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少。类的内部如何实现、如何复杂都与调用者或者依赖者没有关系,调用者或者依赖者值需要知道它需要的方法即可,其他一概不关心。

类和类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

迪米特原则还有一个英文解释: Only talk with immedate friend(只与直接朋友通信).当一个对象与其他对象有耦合关系时,两个对象之间就会成为朋友关系。

优点:
- 低耦合
- 降低复杂度
- 增加稳定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值