PHP设计模式程序员

模板方法设计模式

2018-01-22  本文已影响5人  wudanyang

什么是模板方法

举个简单的例子,人的一生,出生,成长,死亡。
人都是按照这个步骤一步一步的走下去,无一例外。但是每个人都有自己的活法。
其中人的一生(出生、成长、死亡)就是一个模板。而每人的活法就是具体实现。

何时使用模板方法

算法中的每个步骤是确定的,但是每个步骤的具体实现方式是可以灵活多变的。

怎么使用

模板方法的实现方式特别简单。一个抽象类,和一个具体类就能搞定。
抽象类规定了算法的骨架。具体类负责具体过程的实现。
并且可以再其中一些位置插入 钩子
以下代码中的 beforeActionendAction 就是 钩子 的示例。

// 模板方法设计模式

abstract class TemplateMethod
{
    public function operationList()
    {
        echo static::beforeAction();
        echo $this->getText();
        echo $this->getImg();
        echo static::endAction();
    }

    abstract protected function getText();
    abstract protected function getImg();
    protected function beforeAction()
    {
        echo 'before action'.PHP_EOL;
    } 
    protected function endAction()
    {
        echo 'end action'.PHP_EOL;
    } 
}

class Concrete extends TemplateMethod
{
    function beforeAction()
    {
        echo 'concrete before action'.PHP_EOL;
    }

    protected function getText()
    {
        return 'text'.PHP_EOL;
    }

    protected function getImg()
    {
        return 'img'.PHP_EOL;
    }

}


$c = new Concrete();
$c->operationList();
output:
concrete before action
text
img
end action
上一篇下一篇

猜你喜欢

热点阅读