零基础Java:第十七讲(模板方法设计模式(TemplateMethod)、接口)

242 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

模板方法设计模式(TemplateMethod)

  • 模板方法设计模式(TemplateMethod)

    • 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。即抽象类就像一个大纲,里面的抽象方法就是每个章节的标题,子类去根据每个标题写出具体方法
    • 解决的问题

      • 当功能内部一部分实现是确定的,一部分实现不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
      • 编写一个抽象的父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式
    • 举例

      • 第一步:设置两个类
      • 第二步:实例化子类并调用父类方法,运行输出

接口

  • 接口

    • 接口(1)

      • 有时必须从几个类中派生出一个子类,继承他们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以实现多重继承的效果
      • 接口(interface)是抽象方法和常量值的定义的集合
      • 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
      • 实现接口类:

        • class SubClass implements InterfaceA{}
      • 一个类可以实现多个接口,接口也可以继承其他接口。
    • 接口(2)

      • 接口的特点:

        • 用interface来定义
        • 接口中的所有成员变量都默认是由public static final修饰的
        • 接口中的所有方法都默认是由public abstract修饰的
        • 接口没有构造器
        • 接口采用多层继承机制
      • 举例

        • 接口定义及常量值和方法的定义
        • 类同时继承多个接口
        • 接口间继承
    • 接口(3)

      • 实现接口的类中必须提供接口 中所有方法的具体实现内容,方可实例化。否则仍然为抽象类
      • 接口的主要用途就是被实现类的实现。(面向接口编程)
      • 与继承关系类似,接口与实现类之间存在多态性
      • 定义Java类的语法格式:先写extends,后写implements
    • 问题:接口和抽象类很相似,好像接口能做的事抽象类也能做,干嘛还要用接口呢?理由在接口(4)
    • 接口(4)

      • 抽象类增加新的抽象方法存在的问题
      • 举例:人类是由猴子进化来的,假如穿越回去,改变猴子(新增一个眼睛),对现在人类造成的影响?
      • 结论:从这个假设中可以得出,父类需要稳定的抽象,如果父类老是修改,基于这个父类的子类,子类的子类……这些子类都要受到影响。有时确实需要给父类新增一些方法,那么久不能直接在父类下手,只能新建一个接口,在接口上扩展方法,其他需要的子类自行去实现该接口。
    • 实例应用

      • 描述\
      • 代码设计\
      • 代码实现

        • Person父类
        • Cooking接口
        • Sing接口
        • SCTteacher子类
        • 效果展示
      • 与继承关系类似,接口与实现类之间存在多态性

总结

  • 总结:抽象类是对一类事物的高度抽象,其中既有属性也有方法,接口是对方法的抽象即一系列动作的抽象。需要对一类事物进行抽象时应该使用抽象类,好形成一个父类;当需要对一系列动作抽象时,就使用接口,需要使用这些动作的类去实现相应的接口即可。