工厂模式概念:工厂模式是一种类,它具有为你创建对象的某些方法。你可以使用工厂类创建对象,而不用使用new。这样,如果你想要改变所创建的对象的类型,只需更改该工厂类即可。使用该工厂的所有代码会自动更改。
工厂模式分为三种:① 简单工厂模式 ② 工厂方法模式 ③ 抽象工厂模式
区别:
简单工厂模式:用来生产同一等级结构中的任意产品。(不能增加新产品)
工厂模式:用来生产同意等级结构中的固定产品。(支持增加任意产品)
抽象工厂模式:用来生产不同产品族的全部产品。(不能增加新的产品,但能增加产品族)
1、简单工厂模式
简单工厂模式又叫静态工厂方法模式,简单工厂模式是通过一个静态方法创建对象的
interface people{ function onWeek(); } class Boy implements people{ function onWeek(){ echo '男孩打游戏<br>'; } } class Girl implements people{ function onWeek(){ echo '女孩逛街<br>'; } } class PeopleFactory{ static function createBoy(){ return new Boy(); } static function createGirl(){ return new Girl(); } } $boy = PeopleFactory::createBoy(); $boy->onWeek(); $girl = PeopleFactory::createGirl(); $girl->onWeek();
输出结果:男孩打游戏
女孩逛街
2、工厂方法模式
interface People{ function onWeek(); } class Boy implements People{ function onWeek(){ echo '男孩周末打游戏<br>'; } } class Girl implements People{ function onWeek(){ echo '女孩周末逛街<br>'; } } interface CreatePeople{ //将对象的创建抽象成一个接口,这是与简单工厂模式的本质区别。这样增加了扩展性 function create(); } class FactoryBoy implements CreatePeople{ function create(){ return new Boy(); } } class FactoryGirl implements CreatePeople{ function create(){ return new Girl(); } } class Client{ function test(){ $boyFactory = new FactoryBoy(); $boy = $boyFactory->create(); $boy->onWeek(); $girlFactory = new FactoryGirl(); $girl = $girlFactory->create(); $girl->onWeek(); } } $f = new Client(); $f->test();
输出结果:男孩周末打游戏
女孩周末逛街
3、抽象工厂模式
interface People{ function onWeek(); } class Oboy implements People{ function onWeek(){ echo '男孩周末外出打球<br>'; } } class Iboy implements People{ function onWeek(){ echo '男孩周末宅宿舍打游戏<br>'; } } class Ogirl implements people{ function onWeek(){ echo '女孩周末外出逛街<br>'; } } class Igirl implements people{ function onWeek(){ echo '女孩周末宅宿舍化妆<br>'; } } interface CreatePeople{ //将对象的创建抽象成一个接口,这里是本质区别所在 function createOpen(); function createInter(); } class FactoryBoy implements CreatePeople{ function createOpen(){ return new Oboy(); } function createInter(){ return new Iboy(); } } class FactoryGirl implements CreatePeople{ function createOpen(){ return new Ogirl(); } function createInter(){ return new Igirl(); } } class Client{ function test() { $BoyFactory = new FactoryBoy(); $oboy = $BoyFactory->createOpen(); $oboy->onWeek(); $iboy = $BoyFactory->createInter(); $iboy->onWeek(); $GirFactory = new FactoryGirl(); $ogirl = $GirFactory->createOpen(); $ogirl->onWeek(); $igirl = $GirFactory->createInter(); $igirl->onWeek(); } } $f = new Client(); $f->test();
输出结果: 男孩周末外出打球
男孩周末宅宿舍打游戏
女孩周末外出逛街
女孩周末宅宿舍化妆