資源描述:
《《headfirst設(shè)計(jì)模式》代碼之php版(面向?qū)ο髮W(xué)習(xí))》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、《HeadFirst設(shè)計(jì)模式》代碼之PHP版(面向?qū)ο髮W(xué)習(xí))《HeadFirst設(shè)計(jì)模式》是本不錯(cuò)的講解設(shè)計(jì)模式的書(shū),不像F4寫(xiě)的那么枯燥,應(yīng)該算是比較容易理解的好書(shū)。書(shū)屮的例子都比較淺顯易懂,不過(guò)由于是外國(guó)佬寫(xiě)的,所以例子的習(xí)慣不是很附合中國(guó)特色,可能偶爾看起來(lái)有些別扭,還有語(yǔ)言習(xí)慣也不是小國(guó)風(fēng)。當(dāng)然??看過(guò)這本書(shū)Z后,你才能深刻理解設(shè)計(jì)模式到底能為你解決哪些問(wèn)題,不能為你解決哪些問(wèn)題(比如不能代替你的編碼)。我將書(shū)中部分代碼改成PHP,看下代碼再配合概念應(yīng)該是比較容易理解了。策略模式復(fù)制代碼代碼如下:
2、*策略模式*定義了算法族,分別封裝起來(lái),讓它們之間可以互相替換,*此模式讓算法的變化獨(dú)立于使用算法的客戶(hù)。*/〃飛行行為接口interfaceFlyBehavior{publicfunctionfly();}〃呱呱叫行為接口interfaceQuackBehavior{publicfunctionquack();}〃翅膀飛行classFlyWithWingsimplementsFlyBehavior{publicfunctionfly(){echoHrmflying!!";}}〃不會(huì)飛classFlyNoWayimp
3、lementsFlyBehavior{publicfunctionfly(){echo"Ican'tfly!";}}classFlyRocketPoweredimplementsFlyBehavior{publicfunctionfly(){echo'Tmflyingwitharocket!";}}classQquackjmplementsQuackBehavior{publicfunctionquack(){echo"Quack'rT;}}classSqueakimplementsQuackBehavior{p
4、ublicfunctionquack(){echoHSqueakrT;}}classMuteQuackimplementsQuackBehavior{publicfunctionquack(){echoH?Silence?u;}}abstractclassDuck{protected$quack_obj;protected$fly_obj;publicabstractfunctiondisplay();publicfunctionperformQuack(){$this->quack_obj->quack();}p
5、ublicfunctionperformFly(){$this->fly_obj->fly();}publicfunctionswim(){echoHAIIducksfloat,evendecoys!'1;}publicfunctionsetFlyBehavior(FlyBehavior$fb){$this->fly_obj=$fb;}publicfunctionsetQuackBehavior(QuackBehavior$qb){$this->quack_obj=$qb;}}classModelDuckextend
6、sDuck{publicfunction_construct(){$this->fly_obj=newFlyNoWay();$this->quack_obj=newMuteQuack();}publicfunctiondisplay)){echo'Tmamodelduck!u;}}$model=newModelDuck();$model->performFly();$model->performQuack();〃提供新的能力$model->setFlyBehavior(newFlyRocketPowered());$
7、model->setQuackBehavior(newSqueak());$model->performFly();$model->performQuack();?>單件模式復(fù)制代碼代碼如下:
8、e==null){self::$uniquelnstanee=newMyClass();}returnself::$uniquelnstance;}}$myClass=MyClass::getlnstance();var_dump($myClass);$myClass=MyClass::getlnstance();v