原型模式是抽象工廠模式/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物件導向開發之-原型模式的內容,更多相關內容請關注PHP中文網(www.php.cn)!