設計模式:工廠模式
阿新 • • 發佈:2018-06-11
ide 通用 指定 turn IT left func dep cif
一、工廠方法模式
工廠方法模式。定義為:Define an interface for creating an object,but let subclasses decide which class toinstantiate.Factory Method lets a class defer instantiation to subclasses.(定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。)
工廠模式通用類圖
<?php interface zoon { function introduce(); }class dog implements zoon{ function introduce(){ echo "我是小狗,我汪汪汪叫" . PHP_EOL; } } class pig implements zoon{ function introduce(){ echo "我是小豬,我哼哼哼叫" . PHP_EOL; } } class sheep implements zoon{ functionintroduce(){ echo "我是小羊,我咩咩咩叫" . PHP_EOL; } } interface createZoon{ function create(); } class FactoryDod implements createZoon{ function create(){ return new dog(); } } class FactoryPig implementscreateZoon{ function create(){ return new pig(); } } class FactorySheep implements createZoon{ function create(){ return new sheep(); } } class Factory{ function __construct(){ $d = new FactoryDod(); $d->create()->introduce(); $p = new FactoryPig(); $d->create()->introduce(); $s = new Factorysheep(); $s->create()->introduce(); } } $t = new Factory();
二、簡單工廠模式
<?php interface zoon { function introduce(); } class dog implements zoon{ function introduce(){ echo "我是小狗,我汪汪汪叫" . PHP_EOL; } } class pig implements zoon{ function introduce(){ echo "我是小豬,我哼哼哼叫" . PHP_EOL; } } class sheep implements zoon{ function introduce(){ echo "我是小羊,我咩咩咩叫" . PHP_EOL; } } class FactoryDod { static function create(){ return new dog(); } } class FactoryPig{ static function create(){ return new pig(); } } class FactorySheep{ static function create(){ return new sheep(); } } class Factory{ function __construct(){ $d = FactoryDod::create(); $d->introduce(); $p = FactoryPig::create(); $d->introduce(); $s = Factorysheep::create(); $s->introduce(); } } $t = new Factory();
三、抽象工廠模式
抽象工廠模式(Abstract Factory Pattern)定義:Provide an interface for creating families of related or dependent objects without specifyingtheir concrete classes.(為創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類。)
<?php interface Human { function getColor(); function talk(); function getSex(); } abstract class abstractWhiteHuman implements Human{ public function getColor(){ echo "皮膚顏色:白色" . PHP_EOL; } public function talk(){ echo "語言:白人語言" . PHP_EOL; } } abstract class abstractBlackHuman implements Human{ public function getColor(){ echo "皮膚顏色:黑色" . PHP_EOL; } public function talk(){ echo "語言:黑人語言" . PHP_EOL; } } abstract class abstractYellowHuman implements Human{ public function getColor(){ echo "皮膚顏色:黃色" . PHP_EOL; } public function talk(){ echo "語言:黃人語言" . PHP_EOL; } } class FemaleYellowHuman extends abstractYellowHuman{ function getSex(){ echo "性別:女性" . PHP_EOL; } } class MaleYellowHuman extends abstractYellowHuman{ function getSex(){ echo "性別:男性" . PHP_EOL; } } class MaleBlackHuman extends abstractYellowHuman{ public function getSex(){ echo "性別:男性" . PHP_EOL; } } class MaleWhiteHuman extends abstractYellowHuman{ public function getSex(){ echo "性別:男性" . PHP_EOL; } } interface HumanFactory{ function createYellowHuman(); function createWhiteHuman(); function createBlackHuman(); } class FemaleFactory implements HumanFactory{ function createBlackHuman(){ return new FemaleBlackHuman(); } function createWhiteHuman(){ return new FemaleWhiteHuman(); } function createYellowHuman(){ return new FemaleYellowHuman(); } } class MaleFactory implements HumanFactory{ function createBlackHuman(){ return new MaleBlackHuman(); } function createWhiteHuman(){ return new MaleWhiteHuman(); } function createYellowHuman(){ return new MaleYellowHuman(); } } class main{ public function create(){ $maleHumanFactory = new MaleFactory(); $femaleHumanFactory = new FemaleFactory(); $maleYellowHuman = $maleHumanFactory->createYellowHuman(); $maleYellowHuman->getColor(); $maleYellowHuman->talk(); $maleYellowHuman->getSex(); } } $t = new main(); $t->create();
設計模式:工廠模式