栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式之美-08| 理论六:为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之美-08| 理论六:为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

八、设计模式之美-08| 理论六:为什么基于接口而非实现编程?有必要为每个类都定义接口吗? 一.如何解读原则中的“接口”二字? 1、接口是一个设计思想,而不是具体的编程语言。

“基于接口而非实现编程”这条原则的英文描述是:“Program to an interface, not an implementation”。我们理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如 Java 中的 interface 接口语法)。这条原则最早出现于 1994 年 GoF 的《设计模式》这本书,它先于很多编程语言而诞生(比如 Java 语言),是一条比较抽象、泛化的设计思想。

2、如何理解基于接口而非实现编程

基于接口而非实现编程可以理解为基于抽象而非实现变成,对于软件设计而言,越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。而抽象就是提高代码扩展性、灵活性、可维护性最有效的手段之一。

二.如何将这条接口原则应用到实战中?

在实际应用中应该做到以下三点

    函数的命名不能暴露任何实现细节。比如,前面提到的 uploadToAliyun() 就不符合要求,应该改为去掉 aliyun这样的字眼,改为更加抽象的命名方式,比如:upload()。封装具体的实现细节。比如,跟阿里云相关的特殊上传(或下载)流程不应该暴露给调用者。我们对上传(或下载)流程进行封装,对外提供一个包裹所有上传(或下载)细节的方法,给调用者使用。为实现类定义抽象的接口。具体的实现类都依赖统一的接口定义,遵从一致的上传功能协议。使用者依赖接口,而不是具体的实现类来编程。

此外,还有一些人在定义接口的时候,希望通过实现类来反推接口的定义,先把实现类写好,再看实现类中有哪些方法,照抄到接口定义之中,如果按照这个设计思路,可能会导致接口定义不够抽象。

三.是否需要为每个类定义接口?

做任何事情都要讲求一个“度”,过度使用这条原则,非得给每个类都定义接口,接口满天飞,也会导致不必要的开发负担。至于什么时候,该为某个类定义接口,实现基于接口的编程,什么时候不需要定义接口,直接使用实现类编程,我们做权衡的根本依据,还是要回归到设计原则诞生的初衷上来。只要搞清楚了这条原则是为了解决什么样的问题而产生的,你就会发现,很多之前模棱两可的问题,都会变得豁然开朗。

基于接口(抽象)变成的目的是将接口与实现分离,封装不稳定的实现,暴露稳定的接口,上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低代码间的耦合性,提高代码的扩展性。

如果一个功能有且只有一种实现方式,未来也不会被其他的实现方式替换,那就没必要设计接口,也没必要基于接口编程,直接使用实现类就好了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号