PHP シングルトン モードとコマンド チェーン モードを組み合わせて使用​​する手順_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:50:16
オリジナル
945 人が閲覧しました

人によっては記事の内容が簡単すぎるかもしれません。時間が限られているため(妻と買い物に行かなければなりません、笑)、デザインに不規則性、コードの書き方に不規則性、バグがあります。 、などなど。私たちが一緒に進歩できるように、すべてのヒーローがそれを指摘してくれることを願っています。私のレベルは限られています^_^

誰もが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(){}
//単一ピース モードのデザインは、このインスタンスを取得します。 class
static function Load(){
if(self::$__instance == null) self::$__instance = new APP;
return self::$__instance;
}
//APP の $__instance に名前を追加します。新しいコマンドを追加するたびに、このクラスのインスタンスが以前に追加されているかどうかを確認します。 / 存在する場合は、操作を無視します。 そうでない場合は、追加します。
public function addCommand($cmdName){
foreach(self: :$__commands as $cmd){
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;
$cmd->runAction($)アクション, $args);
}
}
if(self::$__flag == 0){
exit("未定義のアクション by アクション : $action");
//クラスのインスタンスを削除するには、クラスの名前を指定するだけです
public function RemoveCommand($className){
foreach(self::$__commands as $key =>$cmd){
if(strto lower( get_class($cmd)) == strto lower($className)){
unset(self::$__commands[$key]);
}
}
}
// 追加と削除が正しいかどうかを全員がテストして確認できるようにします。 success
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);
}
}
//クラス テストはユーザーと同じです
class テストは IRunAction{
static private $__actions = array('addTest', 'modifyTest', 'removeTest) ');
静的パブリック関数 LoadActions(){
return self::$__actions;
パブリック関数 runAction($action, $args){
call_user_func(array($this,$action),
); }
protected function addTest($name){
echo($name);
}
}
//以下はテストコードです
APP::Load()->addCommand(new User); Load()->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 インターフェイスを実装します。両方のクラスは、runCommand 関数によって呼び出すことができる操作を含む配列である静的プライベート変数 $__actions を定義します。

以下はシステムの実行プロセスです:

APPの起動
----- --addCommand、追加されたクラスがあれば、実行する操作が属するクラスを追加します。シングルトン モードを使用して設計されている場合は、次のように addCommand(SingletonClass::Load()) を追加できます。それ以外の場合は、

addCommand( new someClass)
-----runCommand のように調整できます。たとえば、User クラスには addUser という操作があり、runCommand($acttion, $args) を直接有効にできます。クラスのインスタンスにこの操作がある場合は、$__commands 配列をループします。 addCommand を使用してクラスのインスタンスを追加しない場合、未定義の操作が要求され、終了します。
クラス User とクラス Test の runAction は、非常によく使用される関数です。このクラスの対応する関数。

ヒント: これで説明と例は終わりです。このアイデアをどのように理解するかは、すべて自分で行う必要があります。 MVCを実装するかどうかは考え方次第です。)

実際の動作効果は以下の通りです:
PHP シングルトン モードとコマンド チェーン モードを組み合わせて使用​​する手順_PHP チュートリアル
何かあれば中国語レベルに限ります。分かりませんのでご連絡ください
時間があれば記事を書きます

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319414.html技術記事人によっては記事の内容が簡単すぎるかもしれません。時間が限られているため(妻と買い物に行かなければなりません(笑))、デザインに不規則なコードが書かれています。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート