zoukankan      html  css  js  c++  java
  • 我所理解的模板方法模式

    定义

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

    参与角色

    抽象类(AbstractClass)

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

    具体类(子类)

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

    优点

    • 封装不变部分,扩展可变部分
    • 提取公共部分代码,便于维护
    • 行为由父类控制,子类负责实现

    使用场景

    • 多个子类有共有方法,并且逻辑基本相同
    • 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
    • 重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数约束其行为

    代码示例

    # 抽象类  AbstractClass.php
    <?php
    
    namespace AppTest;
    
    
    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 AppTest;
    
    
    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 AppTest;
    
    
    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';
        }
    
    
    }
    

    原文地址:https://segmentfault.com/a/1190000016164272

  • 相关阅读:
    共享内存:mmap函数实现
    navigationItem.rightBarButtonItem 设置背景图片,颜色更改解决的方法
    C语言基础
    easyui datagrid合并相同数据的单元格。
    js 计算总页数的最高效方式
    取消本地文件夹与SVN服务器的关联
    扩展自easyui的combo组件的下拉多选控件
    利用art.template模仿VUE 一次渲染多个模版
    利用art.template模仿VUE
    JavaScript单独的模块中传递数据
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9973692.html
Copyright © 2011-2022 走看看