2-工厂模式

Posted lisongwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
输出结果: 男孩周末外出打球
男孩周末宅宿舍打游戏
女孩周末外出逛街
女孩周末宅宿舍化妆

 

以上是关于2-工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式之单例模式

Java设计模式图文代码案例详解Java五大创建者模式 建造者原型(抽象)工厂单例模式

2-工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

Java代码实现设计模式之工厂模式