php设计模式之工厂模式

场景需求:

某个电商小公司刚开始业务小,只卖书。所以作为程序员的我们写代码只需要一个book类即可。

随着公司的发展,慢慢的开始有其他产品,比如 卖狗跟卖酒,那么问题来了,怎样融合 3个产品。

于是工厂模式产生了:

index.php代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/31
 * Time: 20:35
 */

require "product/ProductFactory.php";

$obj = ProductFactory::getProduct('Wines');

var_export($obj->getList());

  

product/ProductFactory.php 代码:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/31
 * Time: 20:35
 */
class ProductFactory{
    //商品工厂类
    static function getProduct($type){
        $obj = false;
        if(!class_exists($type)){
            require $type.".php";
        }

        switch ($type){
            case "Books":
                $obj = new Books();
                break;
            case "Dogs":
                $obj = new Dogs();
                break;
            case "Wines":
                $obj = new Wines();
                break;
        }
        return $obj;
    }
}

  

books.php代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/31
 * Time: 20:35
 */
class Books{
    public static function getList(){
        return [
            ['prod_id'=>101,'prod_name'=>'php'],
            ['prod_id'=>102,'prod_name'=>'java'],
            ['prod_id'=>103,'prod_name'=>'python'],
            ['prod_id'=>104,'prod_name'=>'golang'],
            ['prod_id'=>105,'prod_name'=>'nodejs'],
            ['prod_id'=>106,'prod_name'=>'vue'],
        ];
    }
}

  dogs.php代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/31
 * Time: 20:35
 */
class Dogs{
    public static function getList(){
        return [
            ['prod_id'=>101,'prod_name'=>'white'],
            ['prod_id'=>102,'prod_name'=>'black'],
            ['prod_id'=>103,'prod_name'=>'red'],
            ['prod_id'=>104,'prod_name'=>'yellow'],
            ['prod_id'=>105,'prod_name'=>'blued'],
        ];
    }
}

  wines代码:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/31
 * Time: 20:35
 */
class Wines{
    public static function getList(){
        return [
            ['prod_id'=>101,'prod_name'=>'white wine'],
            ['prod_id'=>102,'prod_name'=>'black wine'],
            ['prod_id'=>103,'prod_name'=>'red wine'],
            ['prod_id'=>104,'prod_name'=>'yellow wine'],
            ['prod_id'=>105,'prod_name'=>'blued wine'],
        ];
    }
}

  

所以我们只需要在 index代码里面输入对应的类即可


$obj = ProductFactory::getProduct('Wines');

 

posted @ 2016-11-03 22:46  人间最美二月天  阅读(140)  评论(0编辑  收藏  举报