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;
}
}以上!
工厂模式可以分为三类:
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;
}
}以上!
相关文章推荐
- php核心学习-设计模式的学习-注册树模式
- php核心学习-设计模式的学习-责任链模式
- php核心学习-设计模式的学习-委托模式
- php核心学习-设计模式的学习-观察者模式
- 设计模式学习之简单工厂模式
- 设计模式学习笔记--简单工厂模式
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- 设计模式学习总结-简单工厂模式(Simple Factory Pattern)
- 设计模式学习之简单工厂模式和策略模式
- 设计模式学习(一):简单工厂模式练习
- php 设计模式(学习笔记)
- 设计模式学习笔记——简单工厂模式
- php设计模式学习
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- 设计模式学习笔记一:Simple factory pattern,简单工厂模式
- 设计模式之简单工厂模式(“从头开始学习设计模式”系列)
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- PHP中设计模式的学习笔记
- 设计模式学习笔记一【简单工厂模式】
- 菜鸟学习设计模式之路——简单工厂模式