1.什么是面向接口编程?

面向接口编程是开发程序的功能先定义接口,接口中定义约定好的功能方法声明,通过实现该接口进行功能的实现,完成软件或项目的要求.软件或项目随着时间的不断变化,软件的功能要进行升级或完善,开发人员只需要创建不同的新类重新实现该接口中所有方法,就可以达到系统升级和扩展的目的.

2.面向接口编程与面向对象开发的区别:

  • 面向对象开发:
    UserDao dao = new UserDao();

    假设项目开发中dao层的技术要升级改造,那么面向对象开发有两种实现方式

    • 将UserDao中的代码删除,全部重写,但是方法名称不允许改变,为了不影响其他层,如service层调用dao的方法
    • 创建一个新的类,如:UserDaoTwo 所有的方法名称照搬,用新技术重写方法体中的内容,但是需要调用dao层的位置,要全部更换为新的类,new UserDaoTwo();
  • 面向接口编程:

    UserDao dao = new UserDaoImpl();

    1.项目需要升级改造时:

    • 不需要修改原来的类,只要创建一个新的类,实现这个接口,以前的方法全部都有,只要重写方法体即可,不会漏写
    • 为了不在调用dao处,修改多次,可以写为UserDao dao = 工具类.getImpl(); 这时如果我们项目升级过程中更改了实现类,只需要在工具类中修改一次,项目中就全部修改了

    这时我们又发现,工具类中如果给多个接口返回实现类,就有如下代码冗余的问题:

      public static Object getBean(){return new UserDaoImpl();}public static Object getCategoryBean(){return new CategoryDaoImpl();}public static Object getFavoriteDaoImpl(){return new FavoriteDaoImpl();}

这时就出现了,面向接口编程的最终版:

  • UserDao dao = 工具类.getImpl(id);在创建实现类的时候,传入一个id. 在配置文件中,根据id唯一标识一个实现类的全限定类名.工具类中只需要根据这个id去配置文件中获得内容,反射 动态实例化创建对象就好了.以后,再修改升级功能时,只需要在配置文件中修改全限定类名就好了

工具类代码:

public class BeanFactoryUtils {
public static Object getBean(String id) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//1.根据传入id 获得配置文件中已经配置好的value属性 ==>全限定类名ResourceBundle bundle = ResourceBundle.getBundle("bean");//bean为配置文件String className = bundle.getString(id);
//2.反射 动态实例化对象  ==>>必须有全限定类名 ==>> 字符串 ==>> 抽取到配置文件中Class clazz = Class.forName(className);return clazz.newInstance();
}
}

配置文件:bean.properties 格式为key=value书写

3.面向接口编程的好处

  • 降低了程序的耦合性.其能够最大限度的解耦,所谓解耦既是解耦合的意思,它和耦合相对。耦合就是联系,耦合越强,联系越紧密。在程序中紧密的联系并不是一件好的事情,因为两种事物之间联系越紧密,你更换其中之一的难度就越大,扩展功能和debug的难度也就越大。
  • 易扩展. 我们知道程序设计的原则是对修改关闭,对新增开放.面向接口编程扩展功能只需要创建新实现类重写接口方法进行升级扩展就可以,达到了在不修改源码的基础上扩展的目的.
  • 易维护

面向接口编程思想(的好处)相关推荐

  1. 面向接口编程思想(转)

    http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599700.html 本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必 ...

  2. java 协程框架_GitHub - yaozhang0105/dactor: Dactor是基于Java的轻量级同步异步统一处理框架,基于协程思想构建...

    DActor Introduction DActor框架基于协程思想设计,可同时支持同步和异步代码,简化在线异步代码的开发,用同步代码的思维来开发异步代码,兼顾异步代码的高并发.无阻塞和同步代码的易读 ...

  3. 面向过程编程思想和面向对象编程思想

    一.面向过程编程思想 百度百科这样解释: "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想. 面向过程其实是最为实际的一种思考方式,就算是面向对象的 ...

  4. 面向对象编程思想和面向过程编程思想的区别

    这里体现的是两种JS的编程思想:面向对象编程和面向过程编程,两者都属于是编程思想,各有优缺点 面向过程: 在项目开发中会有各种的逻辑方法,有的是交互,有的是创建,有的是求结果,面向过程编程是把编程的重 ...

  5. Go 面向接口编程实战

    概述 使用接口能够让我们写出易于测试的代码,然而很多工程师对 Go 的接口了解都非常有限,也不清楚其底层的实现原理,这成为了开发可维护.可测试优秀代码的阻碍. 本节会介绍使用接口时遇到的一些常见问题以 ...

  6. 5.Java面向对象编程

    文章目录 05 Java面向对象编程 1. 面向过程与面向对象比较 2. 类和对象 2.1 对象的属性和方法 2.2 类的属性和方法 2.3 定义一个类 2.4 创建和使用对象 2.5 对象和类的总结 ...

  7. 个人对于架构设计的理解

    处在待业状态最适合做的事情就是对以前的工作和学习做一个总结.    读过一些开源的架构,比如PetShop的架构,Nhibernate的架构,ibatis.net的架构.    自己写过的架构,从最早 ...

  8. 23种设计模式的优点与缺点概况

    设计模式 标签(空格分隔): 设计模式优点 应用场景 整理自<设计模式之禅> 单例模式 优点: 只有一个实例,减少了内存开支: 可以避免对系统资源的多重占用: 可以在系统中设置全局的访问点 ...

  9. 无法创建接口的实例_什么是接口?

    接口 接口概述 接口,是java语言中一种类型,是方法的集合,如果说 类的内部封装了成员变量,构造 方法,和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法,默认方法和静态方法 接口是对功能的 ...

  10. JavaSE——面向对象高级(继承、final关键字、抽象类与接口、多态、Object类、内部类、包装类、可变参数)

    第3节 面向对象高级 一.继承 1.1 概述和使用 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 ...

最新文章

  1. 阿里、京东、快手、华为......他们是如何构建一个个推荐系统“帝国”的?
  2. 迷你世界维护服务器几点到几点,迷你世界服务器房间是什么 | 手游网游页游攻略大全...
  3. Spring中获取bean
  4. 使用jsoup解析html
  5. Web安全手册(漏洞理解、漏洞利用总结)
  6. sync是同步还是非同步_音视频是怎么保持同步的?(四)
  7. java BigDecimal八种舍入模式
  8. MYSQL中的BlackHole引擎
  9. 判断力有时候有多么重要?懂得选择多么重要?
  10. python语言应用章节答案_智慧树APPPython语言应用第十单元章节测试答案
  11. LinkedList简要分析
  12. 0基础可以考CPDA数据分析师证书吗
  13. hive建表语句comment 中文描述乱码
  14. Excel如何快速插入行,删除行
  15. 通过Log4j生成CSV格式日志时自动插入表头处理方法
  16. 宁录哨兵机器人_漫威漫画里奥创、灭霸、哨兵机器人、天启谁更厉害?
  17. Kruise Rollout: 让所有应用负载都能使用渐进式交付
  18. 我学炒外汇 第十三篇影响瑞士法郎的因素
  19. 【java校招你不知道的那些事儿】校招和社招的区别是什么?为什么不参加社招
  20. 深蓝学院-视觉SLAM理论与实践-第十二期-第3章作业

热门文章

  1. TFN FAT130 便携式手持频谱分析仪 9KHZ到6GHZ范围高端频谱测试仪
  2. 软件工程 -- 数据流图的画法
  3. Java-视频按秒截取帧
  4. GeekTool使用cal格式不对齐
  5. 神经网络的原理和应用,神经网络理论及应用
  6. Java、JSP汽车租赁管理系统
  7. 基础篇:源码 Linux+Apache+PHP+MySQL环境配置方法-08CMS网站
  8. python查看qq撤回消息_QQ坦白说里匿名叫我还想逃?Python轻松查看匿名用户信息...
  9. 第十章 隐马尔可夫模型
  10. 卷积神经网络基础知识