作者:阿悅11 | 来源:互联网 | 2024-11-14 21:11
在古代,没有货币的时候,人们只能通过物物交换来获取所需物品。例如,张三需要一匹布,李四需要一头鹅,恰好张三有一头鹅,李四有一匹布,他们便达成协议,以布换鹅,各取所需。然而,这种交易方式存在很大的不确定性,因为每个人的需求不同,张三可能需要鹅,而王五可能需要牛,赵六可能需要羊。如果张三希望与不同的人进行交易,就需要准备多种物品,这使得交易变得非常混乱和麻烦。因此,货币作为一种一般等价物应运而生,大大简化了交易过程。
随着社会的发展,现实货币已无法完全满足人们在交易便捷方面的需求。例如,当你去世界各地旅游时,各个国家和地区的流通货币不同,中国使用人民币,日本使用日元,美国使用美元,欧洲使用欧元,从德国到英国还需将欧元兑换成英镑。频繁的货币兑换不仅麻烦,还增加了交易成本。于是,虚拟货币应运而生,现代人只需一张VISA信用卡,即可在全球范围内轻松消费,无论是美元、日元、欧元还是英镑,都能通过信用卡完成支付。这种“面向信用卡交易”的方式极大地提高了交易的便捷性。
“面向信用卡交易”的好处在于,用户无需了解每种货币之间的兑换比例,也不需要关心信用卡的工作原理,只需要确保账户余额充足,剩下的交易细节由信用卡系统自动处理。这与面向接口编程中的“面向接口”概念非常类似,接口就像是我们的信用卡。
在面向过程的开发中,上层模块直接调用下层模块,形成了一种“上层依赖下层”的关系。这种依赖关系导致了代码的耦合度高,一旦下层模块发生变化,上层模块也需要相应地调整,特别是在多个下层模块同时变化的情况下,上层模块几乎无法维护。为了解决这一问题,在面向对象的开发中引入了“面向接口编程”的理念,其核心思想是“依赖倒置”:
- 上层模块不应依赖于下层模块,而应依赖于抽象。
- 抽象不应依赖于具体实现,具体实现应依赖于抽象。
以MVC模式为例,假设在未采用面向接口编程时,CustomerServlet依赖于具体的实现类CustomerDAO_impl(JDBC实现)和CustomerDao_xml_impl(XML实现)。此时,如果下层实现类发生变化,上层模块(CustomerServlet)也需要随之修改,这使得代码的维护性极差。
而在采用面向接口编程后,CustomerServlet依赖于接口CustomerDAO,具体的实现类则通过多态的方式创建。无论下层实现类如何变化或增加,上层模块(CustomerServlet)都不需要修改,从而大大提高了代码的可维护性和扩展性。