模板模式

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/2/7
* Time: 16:47
*/

namespace frontendmodels;


class TestPaper
{

public function TestQuestion1(){

echo '问题1<br>';

echo '答案为'.$this->Answer1().'<br>';
}
public function TestQuestion2(){

echo '问题2<br>';

echo '答案为'.$this->Answer2().'<br>';
}
public function TestQuestion3(){

echo '问题3<br>';

echo '答案为'.$this->Answer3().'<br>';
}

public function Answer1(){

return '';
}
public function Answer2(){

return '';
}
public function Answer3(){

return '';
}


}

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/2/7
* Time: 16:53
*/

namespace frontendmodels;


class TestPaperA extends TestPaper
{

public function Answer1(){

return 'A';
}
public function Answer2(){

return 'B';
}
public function Answer3(){

return 'C';
}

}

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/2/7
* Time: 16:54
*/

namespace frontendmodels;


class TestPaperB extends TestPaper
{
public function Answer1(){

return 'C';
}
public function Answer2(){

return 'A';
}
public function Answer3(){

return 'B';
}

}

$test1 = new TestPaperA();

$test2 = new TestPaperB();

$test1->TestQuestion1();
$test1->TestQuestion2();
$test1->TestQuestion3();

$test2->TestQuestion1();
$test2->TestQuestion2();
$test2->TestQuestion3();

模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来提现它的优势。有时候我们会遇到由一系列步骤构成的过程需要执行。这个过程从高层次上看是相同的,但有些步骤的实现可能不同。这时候,我们通常就应该要考虑用模板方法模式了。

原文地址:https://www.cnblogs.com/paulversion/p/8427580.html