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

深入理解面向接口编程

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

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

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

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

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

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

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

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


推荐阅读
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
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社区 版权所有