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