整理了一些AaronSaray写的PHP设计模式的demo和自己的理解。看完如果发现我的理解有误,请第一时间指出,谢谢拍赞,求鞭笞/***Decorator装饰者模式*-----------------------------------***来自描述****如果现有对象的部分内容或功能发生变化,但原始结构不变不需要修改**只是入门楼主觉得这个和【AdapterMode】太像了*然后复制了AdapterMode的理论给各位高手看**|->AdapterMode:*ThroughtheAdapterMode,新的代码和功能可以用来帮助更新原来的系统。**经过之前的排练,适配器还是需要继承原来的对象来实现,但是当我们初学面向对象编程时*如果对象开始需要太多的子类,那么对应的代码就会牺牲程序员的理解力和可维护性*通常,我们会尽量保证一个对象的父子关系不超过3个***=========================================***应用场景****迭代新的应用需求**---------------------------------**@version${Id}$*@authorShaoweiPu<54268491@qq.com>*///现在你是农场饲养员,主要负责用于养猪/***Feedingclass*/classfeeding{/***[$mess_tinlunchbox]*@vararray*/public$mess_tin=[];/***[feedfeedingfood]*@authorShaoweiPu*@CreateTime2017-02-23T19:47:18+0800*@param[type]$food[description]*@return[类型][描述]*/publicfunctionfeed($food){$this->mess_tin[]=$food;}/***[getHowtoeatwhat]*@authorShaoweiPu*@CreateTime2017-02-23T19:51:41+0800*@return[类型][描述]*/publicfunctiongetHow(){return$this->mess_tin;}}//以前可以这样喂猪$you=newfeeding;//然后老板给了这些食物$bread=['apple','tangerine','banana',];foreach($breadas$key=>$value){$you->feed($value);}//看看你吃了什么var_dump($you->getHow());/*+--------------------------------------------------------------------|数组(大小=3)|0=>字符串“苹果”(长度=5)|1=>字符串'tangerine'(length=9)|2=>string'banana'(length=6)+--------------------------------------------------------------------*///但是有一天高级育种说这里的食物喂饱了全是小写的,不能接受,猪必须大写//然后你看了养殖类,听说隔壁的兄弟不只是猪用的//还有一个养羊事业部,一只羊还有牛事业部,也用到了这个类//不能乱改//学了适配器,立马觉得用【适配器模式】可以解决问题//但是老板立马说不能乱继承一个父类最多可以继承3个子类//所以聪明的你想到了这样的方法/***养猪事业部专用*/classfeedingDecorator{/***[$_feeding基类容器]*@var数组*/private$_feeding=[];/***[__construct基类变量]*@authorShaoweiPu*@CreateTime2017-02-23T20:00:58+0800*@paramfeeding$feeding[描述]*/publicfunction__construct(feeding$feeding){$this->_feeding=$feeding;}/***[expertFeed高级食品转换器]*@authorShaoweiPu*@CreateTime2017-02-23T20:04:42+0800*@return[type][description]*/publicfunctionexpertFeed(){array_walk($this->_feeding->mess_tin,function(&$value){$value=strtoupper($value);});}}//那么前期可以放心喂$me=newfeeding;foreach($breadas$key=>$value){$me->feed($value);}//然后喂完后开始使用专业养猪部门用的高科技$stm=newfeedingDecorator($me);$stm->expertFeed();//看看你吃了什么var_dump($me->getHow());/*+-------------------------------------------------------------------|数组(大小=3)|0=>字符串'APPLE'(长度=5)|1=>字符串“橘子”(长度=9)|2=>string'BANANA'(length=6)+--------------------------------------------------------------------------*///掌声经久不息