设计模式从零开始——模板方法模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qixinbruce/article/details/79211806

“横看成岭侧成峰,远近高低各不同”

说的就是山是同一座山,但是不同的人站在不同的角度,看到的山的样子也不一样。就像最近在看一档节目,叫做《最强大脑》,里面都是天才、神童、天之骄子,都是站在智商顶峰的一群人,对于节目中难到变态的题目,我只会笑一笑然后放弃,但是那些天才们经过一阵头脑风暴后,问题总会迎刃而解。题目还是那些题目,但是对于答题的人来讲,答案却是五花八门。

说了这么多,就是为了引出今天要说的设计模式——【模板方法模式】。所谓模板,就是固定下来不变的东西,比如考试时的试卷,每个人的领到的试卷题目都是相同的,但是考试的人给出的答案就有对有错,这就是模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法是的子类可以不改变一个算法的结构,即可定义该算法的某些特定步骤。

就拿学生答题举例,试卷就是模板,学生的答案就是子类的方法,代码如下:

试卷类:

public class TestPaper {
    public void QuestionA() {
        System.out.print("试题一:A.x B.x C.x D.x  ");
        System.out.println("答案为:" + AnswerA());
    }

    protected String AnswerA() {
        return "";
    }

    public void QuestionB() {
        System.out.print("试题二:A.x B.x C.x D.x  ");
        System.out.println("答案为:" + AnswerB());
    }

    protected String AnswerB() {
        return "";
    }

    public void QuestionC() {
        System.out.print("试题三:A.x B.x C.x D.x  ");
        System.out.println("答案为:" + AnswerC());
    }

    protected String AnswerC() {
        return "";
    }
}
学生A:

public class StudentA extends TestPaper {
    @Override
    protected String AnswerA() {
        return "A";
    }
    @Override
    protected String AnswerB() {
        return "B";
    }
    @Override
    protected String AnswerC() {
        return "C";
    }
}

学生B:

public class StudentB extends TestPaper {
    @Override
    protected String AnswerA() {
        return "A";
    }
    @Override
    protected String AnswerB() {
        return "B";
    }
    @Override
    protected String AnswerC() {
        return "C";
    }
}

客户端:

public class Paper {
    public static void main(String[] args) {
        TestPaper answerA = new StudentA();
        System.out.println("学生A:");
        answerA.QuestionA();
        answerA.QuestionB();
        answerA.QuestionC();
        TestPaper answerB = new StudentB();
        System.out.println("学生B:");
        answerB.QuestionA();
        answerB.QuestionB();
        answerB.QuestionC();
    }
}
输出结果:




猜你喜欢

转载自blog.csdn.net/qixinbruce/article/details/79211806