2-工厂模式

工厂模式概念:工厂模式是一种类,它具有为你创建对象的某些方法。你可以使用工厂类创建对象,而不用使用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();
输出结果: 男孩周末外出打球
男孩周末宅宿舍打游戏
女孩周末外出逛街
女孩周末宅宿舍化妆

 

posted @ 2019-06-07 22:58  李松伟  阅读(92)  评论(0编辑  收藏  举报