模板模式

  在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行

  场景:总部设计的宝马车的模型模板,由各个分厂去根据抽象方法实现不同的车型,比如车的启动有多种不同实现,车的喇叭系统有多种不同实现,车的导航和自动停车可以有多种不同实现

     但最终一辆车的运作,是以启动——鸣笛注意——导航——停车的固定流程去走的,所以需要严格按照宝马规定的流程来走

  抽象模板类:

复制代码
/**
 * 场景:总部设计的宝马车的模型模板
 * 由各个分厂去根据抽象方法实现不同的车型
 * @author test11
 */
public abstract class BMWTemplate {

    /**
     * 车的启动程序
     */
    public abstract void start();

    /**
     * 车的喇叭系统
     */
    public abstract void alarm();

    /**
     * 车的导航系统
     */
    public abstract void guide();

    /**
     * 停车
     */
    public abstract void stop();


    /**
     * 每辆上路跑的汽车,流程上是一样的,所以固化为模板
     */
    public void run(){
        this.start();

        this.alarm();

        this.guide();

        this.stop();
    }

}
复制代码

  模板的实现BMWCar1

复制代码
/**
 * 基于总部提供的模板实现的BMWCar1
 * @author test11
 */
public class BMWCar1 extends BMWTemplate{

    @Override
    public void start() {
        System.out.println("BMWCar1启动");
    }

    @Override
    public void alarm() {
        System.out.println("BMWCar1鸣笛");
    }

    @Override
    public void guide() {
        System.out.println("BMWCar1导航");
    }

    @Override
    public void stop() {
        System.out.println("BMWCar1停车");
    }
}
复制代码

  模板的实现BMWCar2

复制代码
/**
 * 基于总部提供的模板实现的BMWCar2
 * @author test11
 */
public class BMWCar2 extends BMWTemplate{

    @Override
    public void start() {
        System.out.println("BMWCar2启动");
    }

    @Override
    public void alarm() {
        System.out.println("BMWCar2鸣笛");
    }

    @Override
    public void guide() {
        System.out.println("BMWCar2导航");
    }

    @Override
    public void stop() {
        System.out.println("BMWCar2停车");
    }
}
复制代码

  模板模式用户测试

复制代码
/**
 * 模板模式测试
 * @author test11
 */
public class Demo {

    public static void main(String[] args) {
        //车型1测试
        BMWCar1 car1 = new BMWCar1();
        car1.run();


        //车型2测试
        BMWCar2 car2 = new BMWCar2();
        car2.run();
    }
}
复制代码

 

posted @   纪煜楷  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示