<?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. axios 处理并发请求

    //同时发起多个请求时的处理 axios.all([get1(), get2()]) .then(axios.spread(function (res1, res2) { // 只有两个请求都完成才会 ...

  2. 个人shell积累

    1:bc 计算器2:ps:列出用户的进程3:more 有三种用法 $more filename 显示文件内容 $command | more 将command命令的输出分页显示 $more < ...

  3. curl测试Docker容器连通性

    通过curl来测试docker对外访问是否正常,这里测试Docker tomcat容器访问: [root@mysqlserver ~]# curl http://172.17.0.8:8080 < ...

  4. c#实现记事本

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. OpenGL/GLSL数据传递小记(2.x)(转)

    本篇记录一下关于OpenGL程序中绑定各种GLSL变量的一些注意问题(有些是近期编写代码感受强烈的).以供参考.——ZwqXin.com 本文来源于 ZwqXin (http://www.zwqxin ...

  6. 在iOS中实现sticky header

    经常在网页中看到这样一种效果,当页面滚动一段距离后,页面中的某个部分固定在一个区域(通常是头部导航),这种效果一般称为Sticky Header,如下图所示: 上述操作在Android系统中非常好实现 ...

  7. udp广播和多播

    使用UDP协议进行信息的传输之前不需要建立链接, 客户端向服务器发送信息时,客户端只需要给出服务器的ip地址和端口号,可以发送信息.至于服务器端是否存在,是否能够收到该报文,客户端根本不用管. 广播( ...

  8. ubuntu 16.04查询文件安装目录

    dpkg -L filename dpkg -l | grep filename whereis filename find / -name filename

  9. DFS应用——找出无向图的割点

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用于找割点" 的idea 并用源代码加以实现: 0.2) 必须要事先 做个s ...

  10. 在ListView的GroupItem头中显示每列的Summary

    问题描述 WPF自带的ListView和DataGrid控,都提供了数据分组的支持,并可以对分组的Header进行自定义.但是,如果想在每个分组的Header中,显示出本分组的"小计&quo ...