zoukankan      html  css  js  c++  java
  • 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();
    输出结果: 男孩周末外出打球
    男孩周末宅宿舍打游戏
    女孩周末外出逛街
    女孩周末宅宿舍化妆
  • 相关阅读:
    P3158 [CQOI2011]放棋子
    Codeforces 1220D. Alex and Julian
    Codeforces 1220C. Substring Game in the Lesson
    Codeforces 1220B. Multiplication Table
    BZOJ 3260. 跳
    BZOJ 3251. 树上三角形
    P1398 [NOI2013]书法家
    P1224 [NOI2013]向量内积
    The Preliminary Contest for ICPC Asia Shanghai 2019 A. Lightning Routing I
    P4271 [USACO18FEB]New Barns
  • 原文地址:https://www.cnblogs.com/lisongwei/p/10989315.html
Copyright © 2011-2022 走看看