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去指向的类去找不同的车自己继承模板重写的实现方法。

好了,模板设计模式的应用简要介绍就到此了,可以理解后自己再扩展下。

posted on 2022-11-08 07:36  小目标青年  阅读(59)  评论(0编辑  收藏  举报