模板方法设计模式

作者: wudanyang | 来源:发表于2018-01-22 19:47 被阅读5次

    什么是模板方法

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

    何时使用模板方法

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

    怎么使用

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

    相关文章

      网友评论

        本文标题:模板方法设计模式

        本文链接:https://www.haomeiwen.com/subject/irjraxtx.html