JAVA 模板设计模式
今天来介绍下一个我觉得蛮不错的设计模式(比较容易应用于业务场景),它就是---模板设计模式。
OK,我们直接看代码:
模板模式,那当然我们需要建一个模板先,建一个抽象类,VehicleControlModel.java:
(这里我们使用一个不同车辆进行不同指令远程的业务场景)
/**
* @Author : JCccc
* @CreateTime : 2019-1-14
* @Description :
* @Point: Keep a good mood
**/
/**
* 汽车指令控制模板
*/
public abstract class VehicleControlModel {
/**
* 启动发动机
*/
protected abstract void startEngine();
/**
* 关闭发动机
*/
protected abstract void shutDownEngine();
/**
* 打开空调
*/
protected abstract void openAC();
/**
* 关闭空调
*/
protected abstract void closeAC();
/**
*
*/
public final void excet(){
//启动发动机
this.startEngine();
//关闭发动机
this.shutDownEngine();
//开启空调
this.openAC();
//关闭空调
this.closeAC();
}
}
有了模板,接下来创建几个集成这个抽象类模板的类,也就是所谓的不同的车:
第一辆车,
/**
* @Author : JCccc
* @CreateTime : 2019-1-14
* @Description :
* @Point: Keep a good mood
**/
public class Audi extends VehicleControlModel {
@Override
protected void startEngine() {
System.out.println("奥迪 启动发动机");
}
@Override
protected void shutDownEngine() {
System.out.println("奥迪 关闭发动机");
}
@Override
protected void openAC() {
System.out.println("奥迪 空调开启");
}
@Override
protected void closeAC() {
System.out.println("奥迪 空调关闭");
}
}
第二辆车:
/**
* @Author : JCccc
* @CreateTime : 2019-1-14
* @Description :
* @Point: Keep a good mood
**/
public class BMW extends VehicleControlModel {
@Override
protected void startEngine() {
System.out.println("宝马 启动发动机 ");
}
@Override
protected void shutDownEngine() {
System.out.println("宝马 关闭发动机 ");
}
@Override
protected void openAC() {
System.out.println("宝马 空调开启");
}
@Override
protected void closeAC() {
System.out.println("宝马 空调关闭");
}
}
第三辆车:
/**
* @Author : JCccc
* @CreateTime : 2019-1-14
* @Description :
* @Point: Keep a good mood
**/
public class Yamaha extends VehicleControlModel{
@Override
protected void startEngine() {
System.out.println("雅马哈 启动发动机");
}
@Override
protected void shutDownEngine() {
System.out.println("雅马哈 关闭发动机");
}
@Override
protected void openAC() {
System.out.println("雅马哈 空调开启");
}
@Override
protected void closeAC() {
System.out.println("雅马哈 空调关闭");
}
}
好了,模板模式大体已经完成了。可以看到,我们先是根据不同车都能进行远程控制这个一个特性,抽离出来,建了一个抽象类(也就是指令控制模板);然后再是创建不同的车对应类去继承该模板,然后重写模板里面的方法。
可能到此,你可能还是没有发现这个模板模式有啥好的,那么我们继续看看怎么调用:
我们创建一个测试类,ControlClient.java :
/**
* @Author : JCccc
* @CreateTime : 2019-1-14
* @Description :
* @Point: Keep a good mood
**/
public class ControlClient {
public static void main(String[] args) {
VehicleControlModel Audi_car=new Audi();
Audi_car.excet();
VehicleControlModel BWM_car=new BMW();
BWM_car.excet();
VehicleControlModel Yamaha_car=new Yamaha();
Yamaha_car.excet();
}
}
可以从代码里发现,我们是通过模板创建不同的车,指向对应车的类。
然后统一调用模板里面的统一车控方法,再通过this去指向的类去找不同的车自己继承模板重写的实现方法。
好了,模板设计模式的应用简要介绍就到此了,可以理解后自己再扩展下。