模板方法模式设计答题问题

1 模式介绍

 


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

 

 

 

 

2 模式中的角色

 


  2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

 

 

 

 

 

 

  2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

 

 

 

 

 

3 模式结构

 

 

 

 

4 项目应用

4.1 需求分析      

 设计一个老师出题目,学生回答的场景。

 

4.2 类图设计

   

 

4.3 源码设计

 

<?php
/**
 * 模板方法模式
 * copyring (c) http://blog.csdn.net/CleverCode
 */


abstract class Exam
{/*{{{*/
    public function question1()    
    {
        echo "1+1=:\r\n";
        echo "答案".$this->answer1()."\r\n";
    }

    public function question2()    
    {
        echo "5*8=:\r\n";
        echo "答案".$this->answer2()."\r\n";
    }

    public function question3()    
    {
        echo "9 - 1=:\r\n";
        echo "答案".$this->answer3()."\r\n";
    }

    abstract public function answer1();
    abstract public function answer2();
    abstract public function answer3();

}/*}}}*/

class StudentA extends Exam
{/*{{{*/
    public function answer1()
    {
        return 2;     
    }

    public function answer2()
    {
       return 40; 
    }

    public function answer3()
    {
       return 8; 
    }
}/*}}}*/

class StudentB extends Exam
{/*{{{*/
    public function answer1()
    {
        return 3;     
    }

    public function answer2()
    {
       return 48; 
    }

    public function answer3()
    {
       return 4; 
    }
}/*}}}*/

function start()
{
    echo "A答题:\r\n";
    $studentA = new StudentA();  
    $studentA->question1(); 
    $studentA->question2(); 
    $studentA->question3(); 
    
    echo "\r\n";
    echo "B答题:\r\n";
    $studentB = new StudentA();  
    $studentB->question1(); 
    $studentB->question2(); 
    $studentB->question3(); 
}

start();

?>

 

 

 

 

 

4.4 执行结果

 

技术交流

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值