您的位置:首页 > 编程语言 > PHP开发

php核心学习-设计模式的学习-简单工厂模式

2017-05-29 17:09 323 查看
设计模式是程序员老司机长期积累下来的套路,我们在平时写代码的时候总是自己想怎么写就怎么写,完全没有一种套路或者范式,这会造成我们的代码混乱难以维护,套路就是让我们能够被其他程序员理解以及便于代码的扩展。同时也是让我们花式搬砖,而不是单调的搬砖。

工厂模式可以分为三类: 

1)简单工厂模式(Simple Factory) 

2)工厂方法模式(Factory Method) 

3)抽象工厂模式(Abstract Factory)

这里只分享简单工厂模式,等以后进一步学习另外两种模式。这里我们以简单的电商场景带入,我们卖书,狗,和酒。

简单工厂模式:用户不用去创建具体产品。因为客户有一个工厂来帮他创建产品.想要添加什么产品,这个工厂就可以建。比如想要狗。工厂就创建狗。即工厂可以创建产品。

1,产品类

有这样三个实体类:(这里我们返回数组代替我们向数据库查询数据)

Books:

<?php
class Books implements IProduct
{

function getList()
{

return [
["prod_id"=>101,"prod_name"=>"java从入门到住院"],
["prod_id"=>102,"prod_name"=>"php从精通到放弃"],
["prod_id"=>103,"prod_name"=>"黑客技术从入门到入狱"],
["prod_id"=>104,"prod_name"=>"python光速入门"],
["prod_id"=>105,"prod_name"=>"三小时学会golang"],
];
}

}

Dogs:
<?php
class Dogs implements IProduct
{

function getList()
{
return [
["prod_id"=>201,"prod_name"=>"斑点"],
["prod_id"=>202,"prod_name"=>"泰迪"],
["prod_id"=>203,"prod_name"=>"二哈"],
["prod_id"=>204,"prod_name"=>"金毛"],
["prod_id"=>205,"prod_name"=>"杂交"],
];

}

}

Wines:
<?php
class Wines implements IProduct
{
function getList()
{
return [
["prod_id"=>301,"prod_name"=>"红酒"],
["prod_id"=>302,"prod_name"=>"白酒"],
["prod_id"=>303,"prod_name"=>"啤酒"],
["prod_id"=>304,"prod_name"=>"洋酒"],
["prod_id"=>305,"prod_name"=>"酒精"],
];
}
}2.工厂类
<?php
require("IProduct.php");
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;
}
}3.客户调用类
require ("ProductFactory.php");

$obj=ProductFactory::getProduct("Books");//通过工厂方式来获取图书类
var_export($obj->getList());*/结果如下所示:



使用工厂模式的好处是,当我们遇到变态需求的时候,我们能够拓展进行修改,比如我们想选择狗却想返回酒的数据,这时候,我们可以在工厂类中进行修改,例如:

<?php
require("IProduct.php");
class ProductFactory
{
//商品工厂类
static function getProduct($type)
{
if($type=="Dogs") $type="Wines";//变态需求产生
$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;
}
}以上!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: