ホームページ >バックエンド開発 >PHPチュートリアル >アクティビティ起動モード コマンド チェーン モード命令と組み合わせた PHP シングルトン モード

アクティビティ起動モード コマンド チェーン モード命令と組み合わせた PHP シングルトン モード

WBOY
WBOYオリジナル
2016-07-29 08:38:501550ブラウズ

人によっては記事の内容が簡単すぎるかもしれません。時間が限られているため(妻と買い物に行かなければなりません、笑)、デザインに不規則性、コードの書き方に不規則性、バグがあります。 、などなど。私たちが一緒に進歩できるように、すべてのヒーローがそれを指摘してくれることを願っています。私のレベルは限られています^_^
PHPでのデザインパターンの適用については、誰もがたくさんの本や記事を読んだと思いますが、それらはほとんどありません。サンプルを直接挙げると、ほとんどを読んだ後、プロジェクトの練習がないと、デザインパターンの部分を理解するのが難しくなります
コードが複雑になりすぎないように、例外処理などの内容は追加されていません。
シングルピースモードとコマンドチェーンモード 基本的な知識については、詳しくは説明しませんので、ご自身で調べてください。

コードをコピーします コードは次のとおりです。


/*
*@author:NoAngels
*@time :August 30, 2008
*/
interface IRunAction{
//APPで実行できるクラスで定義されたメソッドを取得します
static function LoadActions();
//クラス内のエントリ関数はクラス内の他の関数を呼び出します
function runAction($action, $args) を使用します
/*
*APP クラス システムのコア部分
*/
class APP{
static private $__instance = null;
static private $__flag = 1;
private function __construct(){}
//Singleware モードのデザインは、このインスタンスを取得しますclass
static function Load(){
if(self::$__instance == null) self: :$__instance = 新しい APP;
return self::$__instance;
}
//APP の $__instance に名前を追加します新しいコマンドを追加するたびに、このクラスのインスタンスが以前に追加されているかどうかを確認します。//存在する場合は、操作を無視します。
public function addCommand($cmdName){
foreach( $cmd としての self::$__ コマンド){
if(strto lower(get_class($cmd)) == strto lower(get_class($cmdName) ))){
self::$__flag = 0
}
}
if(self::$__flag == 1) self::$__commands[] = $cmdName;
self::$__flag = 1;
}
//コマンド チェーン パターン設計のコア部分はエントリ関数を呼び出しますインスタンスの
//まず、クラス内でオペレーションの呼び出しが許可されているかどうかを確認します。許可されていない場合は、未定義のオペレーションの終了を求めます。
self::$__flag = 0;
foreach(self::$__commands as $cmd){
if(in_array($action, $cmd->LoadActions())){
self::$__flag = 1; runAction($action, $args);
}
}
if(self::$__flag == 0){
exit("アクションごとの未定義のアクション: $action"); }
}
//クラスのインスタンスを削除するには、クラスの名前を指定するだけです
public function RemoveCommand($className){
foreach(self::$__commands as $key=> ;$cmd){
if (strto lower(get_class($cmd)) == strto lower($className)){
unset(self::$__commands[$key])
}
}
}
//全員向け 加算と削除は成功しました
public function viewCommands(){
echo(count(self::$__commands))
}
}
//クラス ユーザーは IRunAction インターフェイスを実装します
class ユーザーは IRunAction{
// 呼び出し可能な操作を定義します
static private $__actions = array('addUser', 'modifyUser', 'removeUser');
//呼び出し可能な操作を取得します。実際のプロセスでは直接使用しません。$__actions はパブリック呼び出しとして設計されています
//代わりに、 $__actions の値を取得する LoadActions 関数を設計します
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 ; self::$__actions;
}
パブリック関数 runAction($action, $args){
call_user_func(array($this,$action), $args);
}
保護関数 addTest ($name){
echo( $name);
}
}
//以下はテストコードです
APP::Load()->addCommand(new User); ;addCommand(新しいユーザー);
APP::Load()->addCommand(新しいユーザー);
APP::Load()->runCommand ('addUser', 'NoAngels');
APP::Load()->addCommand(new Test);
APP::Load()->runCommand('addTest', null);
APP クラスはシステムのコア部分であるシングルトン モデルを使用して設計されており、Load メソッドが APP クラスのインスタンスをロードするものであることがわかると思います。これは getInstance 静的メソッドに相当します。いくつかの本には、addCommand、runCommand、removeCommand が含まれています。runCommand は、コマンド チェーン モードのコア スタートアップ プログラムです。コードはすでに公開されています。非常に明確なので、ここでは詳細は説明しません。
User クラスと Test クラスは、IRunAction インターフェイスを実装します。両方のクラスは、APP の runCommand によって呼び出すことができる操作を含む静的プライベート変数 $__actions を定義します。
以下はシステムの実行プロセスです:
APPが開始します
----- addCommand、追加されたクラスがシングルトンを使用して設計されている場合、実行する操作が属するクラスを追加します。それ以外の場合は、次のように調整できます
addCommand(new someClass)
-------runCommand などがあります。 User クラスで addUser 操作を実行すると、直接 runCommand($acttion, $args) を有効にすることができます。いずれかのクラスにこの操作がある場合は、そのインスタンスの runAction 関数を呼び出します。 addCommand を使用して特定のクラスのインスタンスを追加しない場合、未定義の操作が要求され、クラス User とクラス Test の runAction が呼び出されます。
ヒント:これは説明と例です。このアイデアをどのように理解するかは、すべて自分で行う必要があります。MVC を実装するかどうかは、フレームワーク内で 1 つのエントリ ファイルにすることができます。
実際の操作効果は次のとおりです:

 php单件模式结合命令链模式使用说明中国語レベルに限定されます。何かわからないことがあれば、ご連絡ください。
時間があるときにいくつか記事を書きます。後で

上記では、Activity 起動モード、PHP シングルトン モード、およびコマンド チェーン モードの使用方法を紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。