初學者對設計模式多有不解,周末抽時間寫單例模式結合命令鏈模式打造系統核心教程。送給初學者,時間緊 (陪老婆逛街),代碼可能不規範有 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); }
}