深入浅出PHP面向对象与设计模式3--抽象工厂模式
来源:互联网 发布:域名批量询价软件 编辑:程序博客网 时间:2024/05/17 05:03
转载自:http://www.phpchina.com/13268/viewspace_15717.html
三、跨国生产型企业--抽象工厂模式
1、设备太多的工厂
如果我们把网站的会员分成三种,青铜、白银、黄金,那么针对不同等级的会员,我们有对应的打折产品和推荐产品给他们。
如果仅仅考虑青铜和白银会员,这样我们要写四个类,分别对应他们的打折产品和推荐产品。
例:3_1
<?php
//青铜会员的打折商品
class BronzeRebateCommodity
{
//描述
public $descri = '青铜会员的打折商品';
}
//白银会员的打折商品
class SilverRebateCommodity
{
//描述
public $descri = '白银会员的打折商品';
}
//青铜会员的推荐商品
class BronzeCommendatoryCommodity
{
//描述
public $descri = '青铜会员的推荐商品';
}
//白银会员的推荐商品
class SilverCommendatoryCommodity
{
//描述
public $descri = '白银会员的推荐商品';
}
?>
在获取对应的类的的时候,我们可以使用简单工厂,但是增加产品的时候,不方便管理,比如新增黄金会员。
如果用工厂模式,但是这样做的话,就要添加四个设备,同样不方便管理。
这样就会变成一个很多设备的工厂,可以想象出非常混乱。
2、跨国生产型企业
我们可以借鉴一些跨国生产企业的经验,比如飞利浦,他在不同国家建立工厂,生产适合本地市场的产品。
假设中国的销售分公司,只需要找中国工厂要货就行了。而美国的销售分公司,只需要找美国工厂要货就行了。
那么我们可以建立两个不同的工厂,分别针对青铜和白银会员,生产他们需要的对象。
为了便于管理,我们再设立一个生产运营中心,根据生产需求,调度各个工厂。
例:3_2
<?php
//青铜会员的打折商品
class BronzeRebateCommodity
{
//描述
public $descri = '青铜会员的打折商品';
}
//白银会员的打折商品
class SilverRebateCommodity
{
//描述
public $descri = '白银会员的打折商品';
}
//青铜会员的推荐商品
class BronzeCommendatoryCommodity
{
//描述
public $descri = '青铜会员的推荐商品';
}
//白银会员的推荐商品
class SilverCommendatoryCommodity
{
//描述
public $descri = '白银会员的推荐商品';
}
//各个工厂的接口
interface ConcreteFactory
{
//生产对象的方法
public function create($what);
}
//青铜工厂
class BronzeFactory implements ConcreteFactory
{
//生产对象的方法
public function create($what)
{
$productName = 'bronze'.$what.'Commodity';
return new $productName;
}
}
//白银工厂
class SilverFactory implements ConcreteFactory
{
//生产对象的方法
public function create($what)
{
$productName = 'silver'.$what.'Commodity';
return new $productName;
}
}
//调度中心
class CenterFactory
{
//获取工厂的方法
public function getFactory($what)
{
$factoryName = $what.'Factory';
return new $factoryName;
}
}
//建造一个调度中心
$center = new CenterFactory();
//获得一个白银会员的工厂
$factory = $center->getFactory('silver');
//让工厂制造一个推荐产品
$product = $factory->create('Commendatory');
//可以看到是白银会员的推荐商品
echo $product->descri;
?>
这样一来,我们可以将不同会员的需求分开管理了。
思考:
抽象工厂可以将有相同属性的产品分配到不同的工厂管理,可以减少混乱。
不过这也有一点的问题,比如不是所有的产品都有共性,也不是可以采用同一种分类方法。
如果产品过多,就很容易出现某个产品无法归入某个工厂,或者出现有特殊需要的产品,这时候用抽象工厂比较吃力。
- 深入浅出PHP面向对象与设计模式3--抽象工厂模式
- C#面向对象的设计模式 抽象工厂模式
- 面向对象设计模式实践之抽象工厂模式
- C#面向对象设计模式纵横谈3 AbstractFactory抽象工厂模式创建型模式
- php面向对象开发之——抽象工厂模式
- 设计模式【3】:抽象工厂【创建对象】
- C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂(创建型模式)
- 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
- PHP面向对象编程设计模式(三)工厂模式
- 懒羊学习《深入浅出设计模式》C#代码手札之工厂模式与抽象工厂
- 深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) -- 设计模式之工厂模式
- php面向对象(工厂模式与单例模式)
- 【设计模式】之抽象工厂模式-PHP
- php设计模式 抽象工厂模式
- 设计模式深入浅出(一)对象创建——工厂方法,抽象工厂
- C#面向对象设计模式纵横谈 学习笔记3 Abstract Factory 抽象工厂
- C#面向对象设计模式纵横谈 学习笔记3 Abstract Factory 抽象工厂
- 面向对象设计模式-简单工厂模式
- HDU 1124 Factorial
- 两个表结构相同的表中的字段比对
- 图书下载
- poj1015--动态规划(DP)
- mysql之load data
- 深入浅出PHP面向对象与设计模式3--抽象工厂模式
- If IE Html里面的条件控制语句
- 有关性能测试结果的几点分析原则
- Zend Server 错误:The server encountered an internal error or misconfiguration and was unable to comple
- RFC2326-实时流协议(RTSP)
- jquery.validate学习总结
- 集电极开路(OC)/漏极开路(OD)输出的结构
- DB2 如何创建nickname
- 控制软键盘的显示与隐藏