模板方法模式

本文深入探讨了模板方法设计模式的定义与应用,通过具体示例解析了如何使用模板方法来实现代码复用,使子类可以在不改变算法结构的前提下重新定义算法的特定步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板方法

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

模板方法结构图

模板方法实现

/**
 * 假设本题是以考生答试卷为背景,对于考生而言,是不需要去抄试卷的,只是需要去写对应每个题目的答案
 * 即可。那么我们把试卷给抽取出来,学生只是需要去写出答案即可
 * */

TestPaper class


​
/**
 * @className:TeatPaper
 * @Description: 定义模板方法
 * @Date:2018/10/13 16:39
 */
abstract class TestPaper {
    public void test1(){
        System.out.println("“大煮干丝”是哪个菜系的代表菜之一( )。" + "A四川菜系 B山东菜系 C广东菜系 D淮扬菜系");
        System.out.println(answer1());
    }
    /**
     * 给出问题1的答案
     * @return 返回学生所给的答案
     * */
    abstract public String answer1();
​
    public void test2(){
        System.out.println("红茶属于( )茶。\n" +
                "A半发酵 B发酵 C不发酵 D微发酵");
        System.out.println(answer2());
    }
    /**
     * 给出问题2的答案
     * @return 返回学生所给的答案
     * */
    abstract public String answer2();
​
    public void test3(){
        System.out.println("满汉全席起兴于( )。\n" +
                "A清代 B唐代 C宋代 D两汉");
        System.out.println(answer3());
    }
    /**
     * 给出问题3的答案
     * @return 返回学生所给的答案
     * */
    abstract public String answer3();
}

StudentA Class

/**
 * @className:StudentA
 * @Description: 学生A所给的答案
 * @Date:2018/10/13 16:55
 */
public class StudentA extends TestPaper {
    @Override
    public String answer1() {
        return "A";
    }
​
    @Override
    public String answer2() {
        return "B";
    }
​
    @Override
    public String answer3() {
        return "A";
    }
}

StudentB class

/**
 * @className:StudentB
 * @Description: 学生B所给的答案
 * @Date:2018/10/13 16:56
 */
public class StudentB extends TestPaper {
    @Override
    public String answer1() {
        return "B";
    }
​
    @Override
    public String answer2() {
        return "C";
    }
​
    @Override
    public String answer3() {
        return "A";
    }
}

Client Class

/**
 * @className:Client
 * @Description: 客户端
 * @Date:2018/10/13 16:57
 */
public class Client {
    public static void main(String[] args) {
        //将子类变量的声明改成了父类,利用了多态性,实现了对代码的复用
        TestPaper studentA=new StudentA();
        studentA.test1();
        studentA.test2();
        studentA.test3();
​
        TestPaper studentB=new StudentA();
        studentB.test1();
        studentB.test2();
        studentB.test3();
    }
}

小结

模板方法总体来说还是比较简单的,理解好定义即可理解模板方法的精髓。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值