请问面向接口编程与面向实现编程差别在什么地方?
能不能针对这两种方式分别举一个例子呀,谢谢了。

解决方案 »

  1.   

    最有代表性的例子就是你写的程序有可能要适应多种类型的数据库,sqlserver,oracle,mysql,access等如果上来你只是使用Sqlserver数据库,那么你的程序里都是直接使用sqlserver相关的类进行数据访问,比如SqlConnection,SqlCommand,SqlDataReader等等,但有一天你的老板说了我们还要支持其他的数据,你难道喜欢该程序吗?所以你一开始编码的时候就要针对接口而不是具体的类来编程,所以你要用IDbConnection,IDbCommand,IDataReader等等。而针对不同的数据库你只需要修改配置然后利用反射或者if判断来new具体的子类就可以了。说了一大堆其实就一句话遵循OCP原则(open-close-principle),你只要针对接口编程了,那么就会对新增需求扩展是开放的(你可以支持各种数据库),对修改代码是关闭的。
      

  2.   

    现在绝大多数都是面向接口编程,
    开发的windows应用程序都是面向接口的,
    微软提供了windows API 程序员就基于API函数进行编程,调用它的功能就行了
    至于功能怎么实现的那就是微软的事了,微软升级系统大部分API没变,
    所以理论上说,你在windows98下开发的程序在Windows XP下照样能够运行
      

  3.   

    面向接口的就是定义对象的时候都是直接通过接口来进行定义:比如Interface obj....当然一般不会直接这样的:Interface obj=new class()。一般都需要使用工厂来返回需要创建的对象。这样的好处是,实际使用的对象是在使用的时候才确定返回哪个当你的需求发生变换的时候,你不必要修改现在的任何东西,而是根据接口重新定义个新的对象,在工厂中返回。。这才是真正的“多态”
    感觉还蛮难描述的呢。。可以看看PetShop4中的 数据访问层 SQLServerDAL和ORacleDAL这两,就是通过接口来实现。
      

  4.   


    UserDaoIfc dao = new UserDaoMysqlImpl();
    User user = new User("abc")
    dao.save(user);
    如果你要改用Oracle数据库了。。比如用UserDaoOracleImpl();
    只需要将UserDaoMysqlImpl  改成 UserDaoOracleImpl 就可以了。。
    如果用spring的话只需要在配置文件中修改。。而不需要修改java代码
    dao.save(user);这句话会调用具体的实现类的方法。。多态的存在是接口非常强大