原型模式是抽象原廠模式/content/10866786.html強大的變形,簡單來說,它將抽象原廠模式中的若干工廠類組合合并成一個中控類,由中控類開負責產生對象。
<?php//生產引擎的標準interface engineNorms{function engine();}class carEngine implements engineNorms{public function engine(){return '汽車引擎';}}class busEngine implements engineNorms{public function engine(){return '巴士車引擎';}}//生產車身的標準interface bodyNorms{function body();}class carBody implements bodyNorms{public function body(){return '汽車車身';}}class busBody implements bodyNorms{public function body(){return '巴士車車身';}}//生產車輪的標準interface whellNorms{function whell();}class carWhell implements whellNorms{public function whell(){return '汽車輪子';}}class busWhell implements whellNorms{public function whell(){return '巴士車輪子';}}//原型工廠class factory{private $engineNorms;private $bodyNorms;private $whellNorms;public function __construct(engineNorms $engineNorms,bodyNorms $bodyNorms,whellNorms $whellNorms){$this->engineNorms=$engineNorms;$this->bodyNorms=$bodyNorms;$this->whellNorms=$whellNorms;}public function getEngineNorms(){return clone $this->engineNorms;}public function getBodyNorms(){return clone $this->bodyNorms;}public function getWhellNorms(){return clone $this->whellNorms;}}$carFactory=new factory(new carEngine(),new carBody(),new carWhell());$car['engine']=$carFactory->getEngineNorms()->engine();$car['body']=$carFactory->getBodyNorms()->body();$car['whell']=$carFactory->getWhellNorms()->whell();print_r($car);$busFactory=new factory(new busEngine(),new busBody(),new busWhell());$bus['engine']=$busFactory->getEngineNorms()->engine();$bus['body']=$busFactory->getBodyNorms()->body();$bus['whell']=$busFactory->getWhellNorms()->whell();print_r($bus);?>
原型模式減少了代碼量,而且在返回對象時,更是可以加入自訂的操作,十分的靈活方便。但要注意的是,原型模式使用了clone方法,請注意clone產生的淺複製問題,即,被clone的對象的屬性中包含對象,那clone得到的將不是新的複本,而是相同的引用。
以上就是php物件導向開發之——原型模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!