【设计模式】Template 模板模式

是什么:
顾名思义,就是通过模板拓印的方式, 定义模板采用抽象类来定义,公共的结构化逻辑需要在抽象类中完成,只将非公共的部分逻辑抽象成抽象方法,留待子类充实实现。
在这里插入图片描述
AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就是一个抽象模板,定义并实现了一个模板方法。
ConcreteClasses:ConcreteClass实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

网上有朋友总结的例子挺好的,在此借用一下。
具体代码实现例子:
AbstractClass(抽象模板):

TestPaper类

public class TestPaper {

    public void testQuestion1() {
        System.out.println("杨过得到,后来给了郭靖," +
                "炼成倚天剑、屠龙刀的玄铁可能是[ ]\n" +
                "a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维");
        System.out.println("答案: " + answer1());
    }

    public void testQuestion2() {
        System.out.println("杨过、程英、陆无双铲除了情花,造成[ ]\n" +
                "a.使这种植物不再伤人 b.使一种珍惜物种灭绝\n" +
                "c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化");
        System.out.println("答案: " + answer2());
    }

    public void testQuestion3() {
        System.out.println("蓝凤凰致使华山师徒、桃谷六仙呕吐不止," +
                "如果你是大夫,会给他们开什么药[ ]\n" +
                "a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶");
        System.out.println("答案: " + answer3());
    }

    public String answer1() {
        return null;
    }

    public String answer2() {


        return null;
    }

    public String answer3() {
        return null;
    }
}

ConcreteClass(实现父类所定义的一个或多个抽象方法)
TestPaperA类:

/**
 * 学生甲抄的试卷
 */
public class TestPaperA extends TestPaper {

    @Override
    public String answer1() {
        return "d";
    }
    @Override
    public String answer2() {
        return "c";
    }
    @Override
    public String answer3() {
        return "c";
    }
}

TestPaperB(ConcreteClass):

/**
 * 学生乙抄的试卷
 */
public class TestPaperB extends TestPaper {

    @Override
    public String answer1() {
        return "a";
    }
    @Override
    public String answer2() {
        return "a";
    }
    @Override
    public String answer3() {
        return "a";
    }
}

客户端:

public class TestPaperClient {

    public static void main(String[] args) {
        System.out.println("学生甲抄的试卷:");
        TestPaperA studentA = new TestPaperA();
        studentA.testQuestion1();
        studentA.testQuestion2();
        studentA.testQuestion3();
        
        System.out.println();

        System.out.println("学生乙抄的试卷:");
        TestPaperB studentB = new TestPaperB();
        studentB.testQuestion1();
        studentB.testQuestion2();
        studentB.testQuestion3();
    }
}

运行结果:

学生甲做的试卷:
杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ]
a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维
答案: d
杨过、程英、陆无双铲除了情花,造成[ ]
a.使这种植物不再伤人 b.使一种珍惜物种灭绝
c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化
答案: c
蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]
a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶
答案: c


学生乙做的试卷:
杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ]
a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维
答案: a
杨过、程英、陆无双铲除了情花,造成[ ]
a.使这种植物不再伤人 b.使一种珍惜物种灭绝
c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化
答案: a
蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]
a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶
答案: a

这是以前在印象笔记中总结的,原文链接没有记录,敬请谅解。

发布了30 篇原创文章 · 获赞 12 · 访问量 3471

猜你喜欢

转载自blog.csdn.net/zx1293406/article/details/103401194
今日推荐