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

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

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

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

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

试卷类:

 

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();
    }
}

输出结果:

 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值