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

深入理解面向接口编程

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

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

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

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

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

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

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

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


推荐阅读
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 深入解析AUTOSAR方法论:汽车电子系统开发的理论基础(第三部分)
    本文详细探讨了AUTOSAR方法论在汽车电子软件系统开发中的应用,涵盖了从系统配置到生成可执行代码的各个关键步骤。通过介绍各阶段的任务和工具支持,帮助读者全面理解AUTOSAR的设计流程。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 优化Jenkins首次启动速度
    本文详细描述了在启动Jenkins后遇到的长时间加载问题,并提供了一种通过修改更新中心配置文件来显著提升启动速度的有效解决方案。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 深入解析Spring Boot自动配置机制
    本文旨在深入探讨Spring Boot的自动配置机制,特别是如何利用配置文件进行有效的设置。通过实例分析,如Http编码自动配置,我们将揭示配置项的具体作用及其背后的实现逻辑。 ... [详细]
  • Win10 UWP 开发技巧:利用 XamlTreeDump 获取 XAML 元素树
    本文介绍如何在 Win10 UWP 开发中使用 XamlTreeDump 库来获取和转换 XAML 元素树为 JSON 字符串,这对于 UI 单元测试非常有用。 ... [详细]
  • Asp.net MVC 中 Bundle 配置详解:合并与压缩 JS 和 CSS 文件
    本文深入探讨了 Asp.net MVC 中如何利用 Bundle 功能来合并和压缩 JavaScript 和 CSS 文件,提供了详细的配置步骤和示例代码,适合开发人员参考学习。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
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社区 版权所有