CenterFactory
<?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的更多相关文章
- PHP设计模式之:工厂模式
工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例: 工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的封装. ...
随机推荐
- UVA 617 - Nonstop Travel(数论+暴力枚举)
题目链接:617 - Nonstop Travel 题意:给定一些红绿灯.如今速度能在30-60km/h之内,求多少个速度满足一路不遇到红灯. 思路:暴力每个速度,去推断可不能够,最后注意下输出格式就 ...
- Elasticsearch 2014年10月简报
1. Elasticsearch Updates 1.1 公布了Kibana 4 Beta 1 和Beta 1.1 Kibana 4不管是在界面的布局,使用配置方法,还是底层绘制图表的方式都与Kiba ...
- <转>Windows平台下Makefile学习笔记(一)
本文转自:http://blog.csdn.net/clever101/article/details/8147352 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发 ...
- Servlet的API(二)
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象.request和response对象既然代表请求和响应,那我们获取 ...
- 15个私有云上的 DevOps 开源工具
原文:http://www.sohu.com/a/136276885_262549 在可维护性,可靠性,效率和安全性方面,DevOps 为私有云在改进操作流程方面发挥着重要的作用.私有云是一个由许多硬 ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- orcad 里误给元件添加了属性,如何删除
1.先尝试点击delete property 2.第一步不行就右键选择filters----->remove current filter进行删除
- 自动化测试 python2.7 与 selenium 2 学习
windows环境搭建 # 下载 python[python 开发环境] http://python.org/getit/ # 下载 setuptools [python 的基础包工具]setupto ...
- IPython introduction
转载:http://blog.csdn.net/gavin_john/article/details/53086766 1. IPython介绍 ipython是一个python的交互式shell,比 ...
- linux无线网络配置_转
转自:http://www.cnblogs.com/dartagnan/archive/2010/12/05/2003521.html 一位资生linux 原文:http://www.hpl.hp ...