热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

深入理解面向接口编程

本文通过古代物物交换的例子引出货币的诞生,进而探讨现代社会中虚拟货币的便利性,并将其类比为面向接口编程的核心思想。

在古代,没有货币的时候,人们只能通过物物交换来获取所需物品。例如,张三需要一匹布,李四需要一头鹅,恰好张三有一头鹅,李四有一匹布,他们便达成协议,以布换鹅,各取所需。然而,这种交易方式存在很大的不确定性,因为每个人的需求不同,张三可能需要鹅,而王五可能需要牛,赵六可能需要羊。如果张三希望与不同的人进行交易,就需要准备多种物品,这使得交易变得非常混乱和麻烦。因此,货币作为一种一般等价物应运而生,大大简化了交易过程。

随着社会的发展,现实货币已无法完全满足人们在交易便捷方面的需求。例如,当你去世界各地旅游时,各个国家和地区的流通货币不同,中国使用人民币,日本使用日元,美国使用美元,欧洲使用欧元,从德国到英国还需将欧元兑换成英镑。频繁的货币兑换不仅麻烦,还增加了交易成本。于是,虚拟货币应运而生,现代人只需一张VISA信用卡,即可在全球范围内轻松消费,无论是美元、日元、欧元还是英镑,都能通过信用卡完成支付。这种“面向信用卡交易”的方式极大地提高了交易的便捷性。

“面向信用卡交易”的好处在于,用户无需了解每种货币之间的兑换比例,也不需要关心信用卡的工作原理,只需要确保账户余额充足,剩下的交易细节由信用卡系统自动处理。这与面向接口编程中的“面向接口”概念非常类似,接口就像是我们的信用卡。

在面向过程的开发中,上层模块直接调用下层模块,形成了一种“上层依赖下层”的关系。这种依赖关系导致了代码的耦合度高,一旦下层模块发生变化,上层模块也需要相应地调整,特别是在多个下层模块同时变化的情况下,上层模块几乎无法维护。为了解决这一问题,在面向对象的开发中引入了“面向接口编程”的理念,其核心思想是“依赖倒置”:

  1. 上层模块不应依赖于下层模块,而应依赖于抽象。
  2. 抽象不应依赖于具体实现,具体实现应依赖于抽象。

以MVC模式为例,假设在未采用面向接口编程时,CustomerServlet依赖于具体的实现类CustomerDAO_impl(JDBC实现)和CustomerDao_xml_impl(XML实现)。此时,如果下层实现类发生变化,上层模块(CustomerServlet)也需要随之修改,这使得代码的维护性极差。

而在采用面向接口编程后,CustomerServlet依赖于接口CustomerDAO,具体的实现类则通过多态的方式创建。无论下层实现类如何变化或增加,上层模块(CustomerServlet)都不需要修改,从而大大提高了代码的可维护性和扩展性。


推荐阅读
author-avatar
阿悅11
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有