我所理解的模板方法模式

2018-08-27  本文已影响0人  蜗牛淋雨

定义

在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为模板方法模式

参与角色

抽象类(AbstractClass)

抽象类不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。

具体类(子类)

该角色负责具体实现抽象类角色中定义的抽象方法。这里实现的方法将会在抽象类角色的模板方法中被调用。

优点

使用场景

代码示例

# 抽象类  AbstractClass.php
<?php

namespace App\Test;


abstract class AbstractClass
{
    /**
     * 模板方法,定义执行的流程
     */
    final public function main()
    {
        $this->operate1();
        $this->operate2();
    }

    /**
     * 操作1
     * @return mixed
     */
    abstract protected function operate1();

    /**
     * 操作2
     * @return mixed
     */
    abstract protected function operate2();

}
# 具体类1 ConcreteClassOne.php

<?php

namespace App\Test;


class ConcreteClassOne extends AbstractClass
{
    
    /**
     * 操作1
     * @return mixed|void
     */
    protected function operate1()
    {
        echo 'ConcreteClassOne: this is operate1';
    }

    /**
     * 操作2
     * @return mixed|void
     */
    protected function operate2()
    {
        echo "ConcreteClassOne: this is operate2";
    }


}
# 具体类2  ConcreteClassTwo
<?php

namespace App\Test;


class ConcreteClassTwo extends AbstractClass
{

    /**
     * 操作1
     * @return mixed|void
     */
    protected function operate1()
    {
        echo 'ConcreteClassTwo: this is operate1';
    }

    /**
     * 操作2
     * @return mixed|void
     */
    protected function operate2()
    {
        echo 'ConcreteClassTwo: this is operate2';
    }


}
上一篇 下一篇

猜你喜欢

热点阅读