今天来介绍下一个我觉得蛮不错的设计模式(比较容易应用于业务场景),它就是---模板设计模式。
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去指向的类去找不同的车自己继承模板重写的实现方法。
好了,模板设计模式的应用简要介绍就到此了,可以理解后自己再扩展下。