本文已参与「新人创作礼」活动,一起开启掘金创作之路。
模板方法设计模式(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子类
- 效果展示
- 与继承关系类似,接口与实现类之间存在多态性
-
总结
- 总结:抽象类是对一类事物的高度抽象,其中既有属性也有方法,接口是对方法的抽象即一系列动作的抽象。需要对一类事物进行抽象时应该使用抽象类,好形成一个父类;当需要对一系列动作抽象时,就使用接口,需要使用这些动作的类去实现相应的接口即可。