首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 單例模式與命令鏈模式基礎實作

     編輯:PHP 綜合知識

前言

初學者對設計模式多有不解,周末抽時間寫單例模式結合命令鏈模式打造系統核心教程。送給初學者,時間緊 (陪老婆逛街),代碼可能不規範有 bug,望大俠指正共同進步。

核心代碼

<?php
interface IRunAction {
    static function LoadActions();
    function runAction($action, $args);
}

class APP {
    static private $__instance = null;
    static private $__commands = array();
    static private $__flag = 1;
    private function __construct() {}
    static function Load() {
        if (self::$__instance == null) self::$__instance = new APP;
        return self::$__instance;
    }
    public function addCommand($cmdName) {
        foreach (self::$__commands as $cmd) {
            if (strtolower(get_class($cmd)) == strtolower(get_class($cmdName))) {
                self::$__flag = 0; break;
            }
        }
        if (self::$__flag == 1) self::$__commands[] = $cmdName;
        self::$__flag = 1;
    }
    public function runCommand($action, $args) {
        self::$__flag = 0;
        foreach (self::$__commands as $cmd) {
            if (in_array($action, $cmd->LoadActions())) {
                self::$__flag = 1;
                $cmd->runAction($action, $args);
            }
        }
        if (self::$__flag == 0) {
            self::$__flag = 1;
            exit("undefined action by action : $action");
        }
    }
    public function removeCommand($className) {
        foreach (self::$__commands as $key => $cmd) {
            if (strtolower(get_class($cmd)) == strtolower($className)) {
                unset(self::$__commands[$key]);
            }
        }
    }
    public function viewCommands() { echo(count(self::$__commands)); }
}

class User implements IRunAction {
    static private $__actions = array('addUser', 'modifyUser', 'removeUser');
    static public function LoadActions() { return self::$__actions; }
    public function runAction($action, $args) { call_user_func(array($this,$action), $args); }
    protected function addUser($name) { echo($name); }
}

class Test implements IRunAction {
    static private $__actions = array('addTest', 'modifyTest', 'removeTest');
    static public function LoadActions() { return self::$__actions; }
    public function runAction($action, $args) { call_user_func(array($this,$action), $args); }
    protected function addTest($name) { echo($name); }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved