日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP單件模式和命令鏈模式的基礎(chǔ)知識(shí)

瀏覽:218日期:2024-01-12 10:48:40

初學(xué)者對(duì)于設(shè)計(jì)模式肯定存在著很多不明白之處,今天剛好周末,就抽出來(lái)點(diǎn)時(shí)間寫了一個(gè)單件模式結(jié)合命令鏈模式打造系統(tǒng)核心的文章,可能對(duì)于部分人來(lái)說(shuō),文章內(nèi)容過(guò)于淺顯,這是送給初學(xué)者的教程,因?yàn)闀r(shí)間比較緊(要陪老婆逛街,呵呵),其中出現(xiàn)了設(shè)計(jì)不規(guī)范的,代碼書寫不規(guī)范的,bug等等還望各路大俠指出來(lái),方便大家共同進(jìn)步.本人水平有限.^_^

相信大家都已經(jīng)讀過(guò)很多關(guān)于在php中應(yīng)用設(shè)計(jì)模式的書籍或是文章,但是很少有直接給予實(shí)例,大部分看完之后有種迷迷糊糊的感覺,如果沒(méi)有項(xiàng)目實(shí)踐,很難將設(shè)計(jì)模式部分弄清楚.

為避免代碼過(guò)于復(fù)雜.沒(méi)有添加異常處理等內(nèi)容.單件模式以及命令鏈模式的基礎(chǔ)知識(shí),大家自己google一下.不詳細(xì)講了.下面直接看實(shí)例:

<?php/**@author:NoAngels*@time:08年08月30日*/interface IRunAction{//獲取類中定義的可以被APP中run的方法static function LoadActions();//類中的入口函數(shù)調(diào)用該類中其他函數(shù)用function runAction($action, $args);}/**APP類系統(tǒng)的核心部分*/class APP{static private $__instance = null;static private $__commands = array();static private $__flag = 1;private function __construct(){}//單件模式設(shè)計(jì)獲取該類的唯一實(shí)例static function Load(){if(self::$__instance == null) self::$__instance = new APP;return self::$__instance;}//添加命名到APP的$__instance中每次添加新命令的時(shí)候檢查是否之前已經(jīng)添加過(guò)一個(gè)該類的實(shí)例//如果有就忽略操作如果沒(méi)有就添加進(jìn)來(lái)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;}//命令鏈模式設(shè)計(jì)的核心部分調(diào)用實(shí)例的入口函數(shù)//首先檢查是否在類中允許調(diào)用該操作如果沒(méi)有就提示未定義操作退出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');}}//刪除某個(gè)類的實(shí)例,只要指定類的名字即可public function removeCommand($className){foreach(self::$__commands as $key=>$cmd){if(strtolower(get_class($cmd)) == strtolower($className)){unset(self::$__commands[$key]);}}}//供大家測(cè)試用看看是否添加以及刪除成功public function viewCommands(){echo(count(self::$__commands));}}//類User實(shí)現(xiàn)接口IRunActionclass User implements IRunAction{//定義可以調(diào)用的操作static private $__actions = array('addUser', 'modifyUser', 'removeUser');//獲取可以調(diào)用的操作,實(shí)際過(guò)程中不要直接就愛你個(gè)$__actions設(shè)計(jì)成public調(diào)用//而應(yīng)該設(shè)計(jì)一個(gè)LoadActions函數(shù)獲取$__actions的值static public function LoadActions(){return self::$__actions;}//運(yùn)行指定函數(shù)public function runAction($action, $args){//不明白這個(gè)函數(shù)使用的可以參看手冊(cè)call_user_func(array($this,$action), $args);}//測(cè)試函數(shù)而已protected function addUser($name){echo($name);}}//類Test同類Userclass 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);}}//以下是測(cè)試代碼APP::Load()->addCommand(new User);APP::Load()->addCommand(new User);APP::Load()->addCommand(new User);APP::Load()->addCommand(new User);APP::Load()->runCommand('addUser', 'NoAngels');APP::Load()->addCommand(new Test);APP::Load()->runCommand('addTest', null);

APP類用單件模式設(shè)計(jì),它是系統(tǒng)的核心部分.相信大家看代碼就知道了Load方法是載入APP類實(shí)例,相當(dāng)于有些書籍中的getInstance 靜態(tài)方法.他有addCommand,runCommand,removeCommand三個(gè)public方法.runCommand是核心部分.同時(shí)也是命令鏈模式的核心啟動(dòng)程序.具體實(shí)現(xiàn)請(qǐng)看源代碼.代碼寫的已經(jīng)很清楚了,就此不再贅述.類User,Test實(shí)現(xiàn)了接口IRunAction,這兩個(gè)類中都定義了一個(gè)靜態(tài)私有變量$__actions,為一數(shù)組,其中包含了可以被APP的runCommand函數(shù)調(diào)用的操作.

下面是系統(tǒng)的運(yùn)行流程:

APP啟動(dòng)-------addCommand,將將要運(yùn)行的操作所屬的類添加到APP中.如果添加的類是用單件模式設(shè)計(jì)的.可以如下添加addCommand(SingletonClass::Load()).否則可以如下調(diào)

addCommand(new someClass)-------runCommand.運(yùn)行操作.比如在User類中有一操作 addUser.我直接可以啟用runCommand($acttion, $args).在APP中循環(huán)遍歷$__commands數(shù)組,如果其中某個(gè)類的實(shí)例擁有該操作,就調(diào)用該實(shí)例的runAction函數(shù).如果你沒(méi)有將某個(gè)類的實(shí)例利用addCommand添加進(jìn)來(lái),就提示未定義操作,退出.在類User和類Test中的runAction調(diào)用了call_user_func這個(gè)非常使用的函數(shù).調(diào)用該類中對(duì)應(yīng)函數(shù).

提示:講解與實(shí)例部分就到此了,具體你怎么理解,以及如何將該思想利用,就看你自己的理解,凡事必須自己動(dòng)手才行.(ps:可以做成框架中的單一入口文件,實(shí)不實(shí)現(xiàn)MVC就看你自己是怎么想的了.)

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产图片一区| 欧美日韩在线观看视频小说| 欧美日韩一视频区二区| 你懂的网址国产 欧美| 国产精品.xx视频.xxtv| 精品久久亚洲| 亚洲激情婷婷| 日本午夜免费一区二区 | 午夜日韩av| 国产模特精品视频久久久久| 精品视频97| 美国三级日本三级久久99| 成人在线免费观看91| 亚洲影视一区二区三区| 日韩欧美精品| 久久精品999| 国产精品美女| 精品入口麻豆88视频| 亚洲日韩中文字幕一区| 亚洲www啪成人一区二区| 日本视频中文字幕一区二区三区| 91精品观看| 国产va免费精品观看精品视频| 久久亚洲色图| 久久天堂av| 久久精品国产99国产精品| 亚洲午夜久久| 日韩精品一区二区三区免费观看| 国产精品探花在线观看| 久久亚洲美女| 欧美搞黄网站| 成人黄色av| 欧美在线看片| 老司机精品久久| 国产99亚洲| 日韩在线精品| 精品视频免费| 国产劲爆久久| 欧美一区自拍| 日韩一区二区三区免费视频 | 在线精品观看| 美女网站一区| 999国产精品999久久久久久| a天堂资源在线| 麻豆精品视频在线观看| 青青草精品视频| 石原莉奈一区二区三区在线观看| 99久精品视频在线观看视频| jizzjizz中国精品麻豆| 精品日韩在线| 国产精品免费大片| 欧美在线91| 日韩在线成人| 热久久久久久久| 国产模特精品视频久久久久| 五月婷婷亚洲| 狠狠爱成人网| av亚洲在线观看| 久久久久午夜电影| 视频二区不卡| 婷婷综合六月| 日韩av免费大片| 精品午夜av| 国产精品极品| 欧美激情五月| 麻豆精品一区二区综合av| 国产日韩欧美一区| 国产亚洲精品美女久久| 热久久久久久| 久久wwww| 精品三级av在线导航| 国产精品国产一区| 国产成人精选| 中文在线免费视频| 日韩av首页| 精品欧美久久| aa亚洲婷婷| 蜜桃视频在线观看一区| 日韩欧美久久| 国产伦理久久久久久妇女| 国产精品大片| 国产 日韩 欧美 综合 一区| 91av亚洲| 亚洲成人日韩| 亚洲精品无吗| 国产日韩欧美三级| 老司机精品在线| 黄色在线观看www| 在线一区视频观看| aa亚洲婷婷| 日本亚洲视频| 国产亚洲精品美女久久久久久久久久| 欧美精品aa| 日韩av二区| 欧美日韩三区| 亚洲理论在线| 国产欧美一级| 福利精品在线| 欧产日产国产精品视频| 美女久久久久| 日本成人在线一区| 欧美韩一区二区| 久久精选视频| 老牛国产精品一区的观看方式| 日韩精品久久久久久| 免费亚洲一区| 色88888久久久久久影院| 亚洲综合精品| 国产三级一区| 日韩在线高清| 亚洲精品美女91| 精品五月天堂| 午夜精品一区二区三区国产| 午夜视频一区二区在线观看| 国产福利一区二区三区在线播放| 日韩欧美午夜| 日韩一区精品字幕| 麻豆成人综合网| 欧美国产91| 国产精品一区亚洲| 久久高清免费| 中文不卡在线| 色爱综合网欧美| 视频一区欧美精品| 精品丝袜久久| 亚洲一区黄色| 麻豆成人在线观看| 国产亚洲欧洲| 精品午夜av| 男女激情视频一区| 国产精品99一区二区三| 男人的天堂久久精品| 成人国产精品| 日本一区二区三区中文字幕| 日韩国产欧美一区二区| 亚洲精品一区二区在线播放∴| 国模精品一区| 老牛国产精品一区的观看方式| 精品久久国产一区| 午夜在线一区二区| 美女高潮久久久| 免播放器亚洲一区| 91一区二区三区四区| 免费美女久久99| 成人在线视频免费| 日本在线成人| 美女少妇全过程你懂的久久| 蜜桃精品视频| 免费看日韩精品| 成人久久一区| 国产极品嫩模在线观看91精品| 亚洲激情av| 精品丝袜久久| 日韩精选在线| 欧美日韩日本国产亚洲在线 | 91成人在线网站| 亚洲欧美一区在线| 久久精品国产精品亚洲毛片| 一区二区国产在线| 麻豆精品蜜桃| 久久中文字幕一区二区三区| 中文字幕亚洲在线观看| 久久天堂av| 久久国内精品| 免费观看在线综合| 亚洲成av人片一区二区密柚| 鲁大师精品99久久久| 在线精品一区| 婷婷精品进入| 91视频精品| 国产精品一区免费在线| 一区二区高清| 九一精品国产| 欧美国产偷国产精品三区| 欧美日韩亚洲一区三区| 视频一区免费在线观看| 亚洲国产日韩欧美在线| 91精品韩国| 老司机免费视频一区二区三区| 亚洲bt欧美bt精品777| 国产精品嫩草99av在线| 99久精品视频在线观看视频| а√在线中文在线新版| 麻豆国产一区| 国产精品主播在线观看| 日本精品一区二区三区在线观看视频| 伊人久久大香线蕉av超碰演员| 日韩av福利| 精品久久97| 精品久久一区| 美日韩一区二区三区| 国产精品中文字幕亚洲欧美| 日本aⅴ免费视频一区二区三区| 亚洲精品中文字幕乱码| 成人看片网站| 日韩精品免费一区二区在线观看| 国语对白精品一区二区| 欧美极品中文字幕| 国产精品主播在线观看| 国产毛片一区二区三区|