设计模式之接口型模式

Posted on 2017-07-27 09:54  future_liu  阅读(1747)  评论(0编辑  收藏  举报

今天来总结一下接口型模式下的第一个设计模式--------接口型模式。

1.首先来说什么是接口型模式?

答:接口型模式就是利用接口规范类之间的行为使得实现该接口的类可以遵循代码的注释、测试和其他的文档说明,使用接口可以对一个类或者一组类的方法进行定义或者重定义。使用接口型模式的好处就是使得接口和实现分离,不会有相互的影响,并且使得代码更加的清晰明了。

2.接口和抽象类的区别有哪些?

答:a.接口是被实现的,使用的关键字是implements,而抽象类是被继承的,使用的关键字是extends.

  b.接口中的方法不能有实现体(java8后可以在接口的方法中定义默认方法体),但是抽象类中的可以有实现体

       c.接口可以被多实现,但是抽象类只能单继承

       d.接口中的方法的修饰符只能是public abstract,省略的话默认也是,但是抽象类中是可以使用protected、public等的修饰符的

       e.接口中不能有成员变量,只能有public static final 修饰的常量,而抽象类中可以定义自己的成员变量

       f.接口不能有构造方法,但是抽象类可以有

       g.接口不能用于实例化对象,抽象类可以

       h.接口中不能有静态方法或者是静态块,但是抽象类中可以有

       i.除非是抽象类,否则接口中的方法都必须被实现,抽象类中的方法可以不被全部实现还是抽象类(java8后声明接口中可以有默认的方法体,实现类中可以不实现这个方法,而使用默认的方法体。)

    

3.接口有哪些特性?

答:a.接口中的方法都会被隐式的指定为public abstract,如果有其他的修饰符出现,编译会出错

       b.接口中的变量会被隐式的指定为public static final 

       c.接口中的方法不能在接口中实现,只能由继承的类来实现

       d.接口允许多个类提供相同的功能,也允许一个类实现多个类 

4.接口和类、抽象类之间的关系?

答:接口可以继承接口,类可以继承抽象类,实现接口,抽象类可以实现接口,但是接口不能继承类(包括抽象类).

那么为什么会存在这些继承关系呢??接口继承接口就好比类继承类一样,为了扩展该接口,一个接口包含的方法可能已经不能完全适用现在的情况了,我们需要在此基础上添加一些其他的功能,那么就需要一个接口继承现有的接口。类继承抽象类,实现接口就不用说了。抽象类可以实现接口是因为当类在实现接口时没有完全实现所有的方法,就会产生抽象类,这样做的好处是,这个抽象类可以作为以下的类的父类,以后的类可以不用实现接口中的所有的方法,因为抽象类中已经实现了部分,简化了代码的长度。但是为什么接口不能继承抽象类呢??因为接口的定义中说接口中不能有方法的实现体,但是抽象类中是可以有方法体的,但是我感觉本质上可能是因为接口不能含有构造方法,但是抽象类作为一个类肯定是会有构造方法的(不管是程序员自己定义的,还是系统默认的无参的构造方法),所以这一点上就会有矛盾,故,接口是不能继承抽象类的。

当实现了接口的类不满足于接口提供的方法时可以进行方法的重写。

5.重写接口中的方法时需要注意什么?

答:a.类在实现接口的方法时,不能抛出强制性的异常,只能在接口中或者继承接口的抽象类中抛出强制性异常

      b.类在重写方法时必须保持方法名一致,并且返回值类型相同或者兼容

6.可以有不存在抽象方法的接口存在吗,就像java中允许一个空类的存在一样?

答:可以有。在java中称为标记接口。当一个接口只有接口的声明而没有内容的时候我们称这样的接口为标记接口。

 那么创建这样的一个空接口有什么用呢??a.它可以作为一个公共的接口,相当于所有的接口的祖宗接口,以后的接口可以继承该接口,完成扩展;b.当一个类实现了该标记接口时,它可以没有限制的往里边添加数据,该类实例化的对象可以拥有多态的特性,这是最初谁标记接口的目的。

7.接口型模式的优势有哪些?

答:java接口的优势是限制了对象之间的协作,这种约束提供了更大的好处就是,因为接口中的方法名称没有变,且返回值不会变,即使实现接口的类发生了巨大的变化,也不会对接受数据的客户端有任何的影响。

8.如果一个类不需要实现该接口下的所有的方法,那么它就不能时一个完整的类了么?

答:可以是,有时候接口提供的方法并不需要为调用者提供服务,在某些情况下,实现类可以为实现的方法提供一个空实现体以此来忽略该调用。

9.什么是(stub)?

答:当我们创建了一系列用于通知的方法时,则可以考虑提供空实现的接口实现类,即利用以对大括号就实现方法的类即称为桩,关于桩这个概念目前还不是很懂,只知道是占坑的代码。

以上就是粗略的总结了一下接口型设计模式,肯定会有一些问题,还望大神多多指教。