<?php
/* 实例3 */
/* 抽象工厂 */
//青铜会员的打折商品
class BronzeRebateCommodity {
//描述
public $desc = '青铜会员的打折商品';
}
//白银会员的打折商品
class SilverRebateCommodity { public $desc = '白银会员的打折商品';
}
//青铜会员的推荐商品
class BronzeCommendatoryCommodity {
public $desc = '青铜会员的推荐商品';
}
//白银会员的推荐商品
class SilverCommendatoryCommodity {
public $desc = '白银会员的推荐商品'; }
//各个工厂的接口
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;
} //获取工厂的静态方法
public static function getFactory2($what) {
$factoryName = $what.'Factory';
return new $factoryName;
}
} //实例化调度中心
$center = new CenterFactory();
//获得一个白银工厂
$factory = $center->getFactory('Silver');
//让白银工厂制造一个推荐商品
$product = $factory->create('Commendatory');
//得到白银会员的推荐商品
echo $product->desc.'<br>';
//获得一个青铜工厂
$factory2 = CenterFactory::getFactory2('Bronze');
//让青铜工厂制造一个打折商品
$product2 = $factory2->create('Rebate');
//得到青铜会员的推荐商品
echo $product2->desc;

CenterFactory的更多相关文章

  1. PHP设计模式之:工厂模式

    工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例: 工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的封装. ...

随机推荐

  1. Spring IOC源代码具体解释之容器初始化

    Spring IOC源代码具体解释之容器初始化 上篇介绍了Spring IOC的大致体系类图,先来看一段简短的代码,使用IOC比較典型的代码 ClassPathResource res = new C ...

  2. 基于webmagic的种子网站爬取

    代码地址如下:http://www.demodashi.com/demo/12175.html 1. 概述 因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫.本文将介绍使用Spring/Myb ...

  3. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  4. swift 中的问号跟感叹号

    ?: 变量在使用过程中可能存在空值,则需要用?标记,否则赋空值会报错 ? 1 2 var mustNoNilValue: String = "Swift" var canNilVa ...

  5. 开源项目UIL(UNIVERSAL-IMAGE-LOADER)

    1 http://www.cnblogs.com/osmondy/p/3266023.html 2 待续

  6. python判断值是否为空

    代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`: 第二种是 `if not x:`: 第三种是`if not x is None`(这句这样理解更清晰 ...

  7. tcpdump command

    工作中一直在用tcpdump,感觉非常方便,今天心血来潮百度了一下tcpdump的用法,才发现原来还有这么多强大的功能自己都不知道,那叫一个汗啊. 以此文作为备份,记录一些新知道的用法,各位网友谁有新 ...

  8. html及css

    html设置网页的结构内容,css设置样式,要记的标签很多,要学好无非是多练,然后看别人怎样写的代码,对比自己的,这样能更好地理解. 关于浮动,既然所有浮动必须要清除,那在设置浮动的同时,就先把清除浮 ...

  9. org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'

    异常原因: 1.mockito的jar包中缺少方法 2.mock方法的时候,返回的是对象,而对象没有重写equals方法 3.mock的实例方法调用方法错误 解决方法: 1.用powermock中的a ...

  10. NPOI 计算单元格高度

    需求 要导出一个Excel,第一行是不定长字符串,合并单元格(A-G)已知,现要计算第一行的高度. 思路 已知,NPOI的宽度单位是1/256个英文字符,在本例中,A列的宽度是2048,即 2048 ...