面向接口编程思想(的好处)

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的难度也就越大。
  • 易扩展. 我们知道程序设计的原则是对修改关闭,对新增开放.面向接口编程扩展功能只需要创建新实现类重写接口方法进行升级扩展就可以,达到了在不修改源码的基础上扩展的目的.
  • 易维护
  • 16
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Java面向接口编程思想是指在编程过程中,尽量使用接口来定义类之间的交互,而不是直接使用具体的实现类。这种思想可以提高代码的灵活性、可扩展性和可维护性。 Java的核心技术之一是Java接口接口是一种抽象的数据类型,它定义了一组方法的签名,但没有具体的实现。通过实现接口,类可以获得接口中定义的方法,并根据自己的需求进行具体的实现。这样,不同的类可以实现同一个接口,从而实现了多态性。 下面是一个示例,演示了Java面向接口编程思想及其核心技术: ```java // 定义一个接口 interface Animal { void sound(); } // 实现接口的类 class Dog implements Animal { public void sound() { System.out.println("汪汪汪"); } } class Cat implements Animal { public void sound() { System.out.println("喵喵喵"); } } public class Main { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.sound(); // 输出:汪汪汪 animal2.sound(); // 输出:喵喵喵 } } ``` 在上面的示例中,定义了一个Animal接口,它包含一个sound方法。然后,通过实现该接口的Dog和Cat类,分别实现了sound方法。在主函数中,创建了一个Dog对象和一个Cat对象,并分别调用了它们的sound方法。由于Dog和Cat类都实现了Animal接口,所以可以将它们赋值给Animal类型的变量,实现了多态性。 通过面向接口编程,我们可以将具体的实现与接口分离,提高了代码的可维护性和可扩展性。同时,面向接口编程也使得代码更加灵活,可以方便地替换不同的实现类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值