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');

浙公网安备 33010602011771号