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();
  • 相关阅读:
    VS2017 无法连接到Web服务器 IIS Express ,IIS Express可以启动,但是无法连接
    ADO.Net实体数据模型添加DB-First/Code First报错
    VS2017+EF6+MySQL8.0配置(.Net Framework 4.5)
    C#对象、List<>转DataTable
    ubuntu 16 安装django nginx uWSGI
    iOS真机测试could not find developer disk image
    iOS App 不支持http协议 App Transport Security has blocked a cleartext HTTP (http://)
    Objective-C Mojo和Django 对接
    第一课 ionic 日志输出
    ionic 使用sqlite
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9168186.html
Copyright © 2011-2022 走看看