zoukankan      html  css  js  c++  java
  • 设计模式之模板模式(PHP实现)

    github地址:https://github.com/ZQCard/design_pattern  
     * 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。
     * 它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
     * 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
     */

    (1)Game.class.php (抽象父类,模板类)

    <?php
    
    namespace Template;
    
    abstract class Game
    {
        abstract function initialize();
        abstract function startPlay();
        abstract function endPlay();
    
        public final function play()
        {
            //初始化游戏
            $this->initialize();
    
            //开始游戏
            $this->startPlay();
    
            //结束游戏
            $this->endPlay();
        }
    }

    (2)Cricket.class.php (具体子类)

    <?php
    
    namespace Template;
    
    class Cricket extends Game
    {
        public function initialize()
        {
            echo "Cricket Game Initialized! Start playing.";
            echo '<br/>';
        }
        
        public function startPlay()
        {
            echo "Cricket Game Started. Enjoy the game!";
            echo '<br/>';
        }
    
        public function endPlay()
        {
            echo "Cricket Game Finished!";
            echo '<br/>';
        }
    }

    (3)Football.class.php (具体子类)

    <?php
    
    namespace Template;
    
    class Football extends Game
    {
        public function initialize()
        {
            echo "Football Game Initialized! Start playing.";
            echo '<br/>';
        }
        
        public function startPlay()
        {
            echo "Football Game Started. Enjoy the game!";
            echo '<br/>';
        }
    
        public function endPlay()
        {
            echo "Football Game Finished!";
            echo '<br/>';
        }
    }

    (4)template.php

    <?php
    一个算法的结构即可重定义该算法的某些特定步骤。
     */
    spl_autoload_register(function ($className){
        $className = str_replace('\','/',$className);
        include $className.".class.php";
    });
    
    use TemplateCricket;
    use TemplateFootball;
    
    $game = new Cricket();
    $game->play();
    
    $game2 = new Football();
    $game2->play();
  • 相关阅读:
    消息中间件(MQ)
    java Lambda表达式
    【测试】性能测试及性能测试工具JMeter
    【Mysql】mysql集群方案之读写分离
    linux下mysql开启远程访问权限及防火墙开放3306端口
    MySQL事务提交与回滚
    MySQL索引
    MySQL视图
    MySQL事务
    MySQL参数化有效防止SQL注入
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9168186.html
Copyright © 2011-2022 走看看