java中接口的美妙

今天我才正真的认识接口.....

interface接口不仅仅是一种多实现,更是这些多实现的统一标准和规范。接口的这两个特点保证了接口具有良好的解耦功能。


耦合:类和类、模块和模块之间存在依赖关系,如果修改了某个实现就需要改一堆已经编写好的代码,这就是代码耦合度较高。
解耦是目的为了动态的选择性(可维护和可扩展定义接口是解耦的必要前提分层注入面向接口编程都是解耦的具体表现。
接口是为了提供更多的选择,所以在设计模式中最基本最常用的一种设计模式是“策略模式”,在组合模式中策略模式也是最好的“搭档”。

分层为什么可以解耦:
模块和模块之间的解耦:分层的目的是使软件具有结构性,便于开发、维护和管理。这正是软件开发希望达到的目的。将不同的功能模块独立开来,在改动一个层模块的时候,另一个层能不改变任何内容即可正常使用,这样可以方便组件功能复用、替换。

注入为什么可以解耦:“工厂模式”是配合注入的最佳设计模式。
类与类之间的解耦 :在一个类中直接new另外一个类,这样的耦合度是非常高的,如a类中new了一个b类,相当于是 静态的硬编码 ,a只能使用b类实现。利用set注入可以实现解耦,由SpringIOC容器管理注入哪种实现, a获取b是通过一个名称然后从spring容器获取的,如果c对象改为这个名称,那么a就拿到的是c,当然b和c是实现的同一个接口,或者继承的同一个类,这不就是解耦吗。 a中存b对象的引用,并在运行时 动态加载 b的某一实例,这可以看做策略模式,是此模式让代码耦合度低了,可以动态选择b实例,而ioc只是管理bean的工具,他可没解耦的功能,只是将耦合转移到配置文件了,这样修改时方便了,仅此而已。


如何实现扩展?如对第三方组件的扩展
实现它们定义的接口,然后在配置文件中注入扩展

面向接口编程为什么可以解耦:
直接面向对象编程的缺点:直接使用类,如果换底层实现那么开发者就重新定义一个类,然后定义一些方法,方法名还和原来类中的方法名不一定相同,甚至是参数返回值都有可能不同,那么程序中要改动的地方就大了,只要使用到原来类的地方,原来的类名要换,原来类中使用的方法名要换。维护性太差。
接口定义的一系列抽象方法,所有的实现类都必须实现这么抽象方法且方法名、参数和返回值都是按照接口定义来着是相同的。即使修改底层实现,那也是必须实现接口按照接口定义的统一方法来实现,那么程序中只要修改下注入就行了,其类名(原来就是接口名)不变,类中使用的方法(方法名、参数、返回值)也不变,都是按照统一的接口来的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值