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();
  • 相关阅读:
    JAVA调优总结:JVM垃圾回收面临的问题解决方案
    用什么紧固件来固定一下我的程序人生呢
    Java设计模式动态代理研究分享
    深入理解Asp.net核心对象
    JAVA编程之动态更新JVM中的class文件
    探索J2ME应用:如何用GCF通信
    MySQL数据库备份的命令应用分享
    送给快要放弃的程序员同行们!
    减速机要像人一样智能减速就厉害了
    如何在Linux系统下进行C++程序开发
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9168186.html
Copyright © 2011-2022 走看看