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();
  • 相关阅读:
    npm install遇到的问题
    已经安装了node和npm,输入node -v 未找到命令
    虚拟机VMware搭建代码环境
    使用VMware出现的各种问题
    bind、delegate、on的区别
    软件设计原则
    Qt 模型/视图/委托
    UML类图与类间六种关系表示
    C++内存分配与释放
    SQLite 自定义函数,聚合,排序规则
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9168186.html
Copyright © 2011-2022 走看看