大话设计模式——1.模板方法模式(Template Method Pattern)

定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

例子:比较重大的考试往往有A、B两套试卷,其中一套出现问题可以立马更换另一套。

定义基类:测试试卷

java 复制代码
public abstract class TestPaper {

    public void testA(){
        System.out.println("测试题A的答案:"+answerA());
    }

    public void testB(){
        System.out.println("测试题B的答案:"+answerB());
    }

    /**
     * 测试A答案
     * @return
     */
    public abstract String answerA();

    public abstract String answerB();
}

派生类:A试卷

java 复制代码
public class TestPaperA extends TestPaper {


    @Override
    public String answerA() {
        return "A";
    }

    @Override
    public String answerB() {
        return "A";
    }
}

派生类:B试卷

java 复制代码
public class TestPaperA extends TestPaper {


    @Override
    public String answerA() {
        return "A";
    }

    @Override
    public String answerB() {
        return "A";
    }
}

测试

java 复制代码
public class Main {

    public static void main(String[] args) {
        System.out.println("A卷答案:");
        TestPaper testPaperA = new TestPaperA();
        testPaperA.testA();
        testPaperA.testB();

        System.out.println("===================");
        System.out.println("B卷答案:");
        TestPaper testPaperB = new TestPaperB();
        testPaperB.testA();
        testPaperB.testB();
    }
}

总结:

优点:提供了一个比较好的代码复用平台,可以不改变算法的结构去重新定义算法的某些特定步骤

缺点:增加了系统的复杂性和抽象性以及理解难度(设计模式中的通用缺点)

相关推荐
CodeAmaz4 分钟前
文件断点续传完整方案
java·文件断点上传
像少年啦飞驰点、4 分钟前
零基础入门 Spring Boot:从‘Hello World’到可部署微服务的完整学习路径
java·spring boot·web开发·编程入门·后端教程
m0_7482486510 分钟前
C++正则表达式攻略:从基础到高级应用
java·c++·正则表达式
墨雨晨曦8811 分钟前
leedcode刷题总结
java·开发语言
qq_124987075320 分钟前
基于SpringBoot的闪电队篮球俱乐部管理系统的设计与开发(源码+论文+部署+安装)
java·数据库·spring boot·后端·spring·毕业设计·计算机毕业设计
a努力。21 分钟前
中国邮政Java面试被问:MySQL的ICP(索引条件下推)优化原理
java·开发语言·数据仓库·面试·职场和发展·重构·maven
猿小羽28 分钟前
Spring AI + MCP 实战:构建企业级 Agent 生态的基石
java·spring boot·llm·agent·spring ai·mcp·artificial intelligence
茶本无香28 分钟前
设计模式之八: 适配器模式解释及应用
java·设计模式·适配器模式
青槿吖29 分钟前
【趣味图解】线程同步与通讯:从抢奶茶看透synchronized、ReentrantLock和wait/notify
java·开发语言·jvm·算法
jiayong2333 分钟前
MQ基础概念面试题
java·kafka·rabbitmq·rocketmq