• 面向接口编程的好处


    面向接口编程一些好处: 
    1.一个功能的调用者只需要关心如何使用此功能,而无须关注功能的实现。 
    如:如我们在main 方法中调用一个client程序,我们只需要Client client = new ClientImpl(), 无论 ClientImpl 类中定义了多么复杂的成员函数和成员变量(包括javadoc),你都看不到,你也无须看到。 
    2.面向接口编程便于团队合作,有了统一的接口(接口是公开的,里面的方法都是public的),无须担心别人的程序无法使用我的实现(他根本就不关心)。假如我们团队正在做一个计算器小程序,想要计算1+2+...+100=?,product manager 写了一个接口,让两个员工分别实现,他最后看那个程序算法算得快,于是这两个员工就对接口分别做了实现。PM只需要写一个程序就可以评估他们的算法。 
    public int getTime(Interface in){ 
    int a = System.currentTime(); 
    in.run(); 
    return Sustem.currentTime()-a; 

    试想一下,如果没有接口,这个经理必须分别new这两个员工的class,然后调用可能不同的方法(A:run(), B:go())来运行。 
      
    3.(回答你的问题)接口的继承关注的是功能的扩展,而不是代码的修改。class的继承就是功能性代码的增加。两者关注的焦点不同。 
      
    本人观点: 
    我个人认为,接口一旦设计好了,很少需要修改,除非业务逻辑或需求有较大变动。 
      
    多继承的用途(只是举个例子): 
    如,SUN对一项技术写了一个规范如J2EE的JMS规范,很多vender在自己的应用服务器(如WebSphere, WebLogic, Jboss等)都要实现这一个规范,故且把这个规范叫做接口,每个vender想要对这个规范添加自己独特的功能,怎么办呢?就是用接口的继承,然后对继承了的接口做实现。 
    举个例子: 
    public interface InterfaceA { 
          
         public void method1(); 

      
    public interface InterfaceB { 
          
         public void method2(); 

      
    public interface InterfaceAB extends InterfaceA, InterfaceB{ 
          
         public void method3(); 

      
    public class InterfaceAImpl implements InterfaceA { 
      
         @Override 
         public void method1() { 
             System.out.println("The implemention of InterfaceA."); 
         } 
      

      
    public class InterfaceBImpl implements InterfaceB { 
      
         @Override 
         public void method2() { 
             System.out.println("The implemention of InterfaceB."); 
         } 
      

      
    public class InterfaceABImpl implements InterfaceAB { 
      
         @Override 
         public void method1() { 
             System.out.println("The implemention of InterfaceAB(method1)."); 
         } 
      
         @Override 
         public void method2() { 
             System.out.println("The implemention of InterfaceAB(method2)."); 
         } 
      
         @Override 
         public void method3() { 
             System.out.println("The implemention of InterfaceAB(method3)."); 
         } 
      

      
    public class Main { 
      
          
         public static void main(String[] args) { 
             InterfaceA a = new InterfaceABImpl(); 
             InterfaceB b = new InterfaceABImpl(); 
             InterfaceAB ab = new InterfaceABImpl(); 
             a.method1(); 
             b.method2(); 
             ab.method3(); 
         } 
      

      
    利用多态(向上转型),我们就可以达到不同vender间接口的统一。 
      
    总之,这种情况我很少见,主要用1、2的特性。 

  • 相关阅读:
    10.22 比赛总结 修剪草坪(mowlawn)、玉米迷宫(cornmaze)
    QProcess怎么实时的读到output的信息
    Qt Visual Studio Add-in 导出的 .pri 怎么用?
    Qt写Activex插件 总结
    osg中内嵌QtBrowser
    解决使用osgModeling的Loft生成管子时的bug(续)
    lua中的中文乱码
    std::string的split函数
    解决使用osgModeling的Loft生成管子时的bug
    Qt里的slot
  • 原文地址:https://www.cnblogs.com/gxpblogs/p/3067874.html
Copyright © 2020-2023  润新知