场景:当有很多种类的操作时,并且每种操作都有h很多小的步骤,但是他们的总体算法逻辑相同,这种情况适合模板方法模式
类图
java实现
模板方法抽象类
public abstract class AbstractModule {
public final void moduleFanction(){
step1();
step2();
}
protected abstract void step1();
protected abstract void step2();
}
ublic class Module1 extends AbstractModule {
@Override
protected void step1() {
}
@Override
protected void step2() {
}
}
public class Module2 extends AbstractModule {
@Override
protected void step1() {
}
@Override
protected void step2() {
}
}
php实现
abstract class AbstractModule
{
public final function moduleFunction()
{
$this->step1();
$this->step2();
}
protected abstract function step1();
protected abstract function step2();
}
class Module1 extends AbstractModule
{
protected function step1()
{
echo 'module1 step1';
}
protected function step2()
{
echo 'module1 step2';
}
}
class Module2 extends AbstractModule
{
protected function step1()
{
echo 'module2 step1';
}
protected function step2()
{
echo 'module2 step2';
}
}
$module1 = new module1;
$module1->moduleFunction();
$module2 = new Module2;
$module2->moduleFunction();
扩展:当有需求是step1一定执行,但是step2,在一定条件下才执行,就要设置钩子方法来控制step2的执行
public abstract class AbstractModule {
public final void moduleFanction(){
step1();
if(isHook()){
step2();
}
}
protected abstract void step1();
protected abstract void step2();
protected boolean isHook(){
return true;
}
}
然后子类根据具体额业务逻辑重写isHook方法来控制父类的step2的执行