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

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

工厂模式可以分为三类: 
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;
    }
}
以上!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值