工厂模式之PHP实现
来源:互联网 发布:350装修软件下载 编辑:程序博客网 时间:2024/05/01 05:46
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 意图:
- * 提供一个创建一系列相关或依赖对象的接口,而无需指定他们具体的类。
- * 适用性:
- * 1、一个系统要独立于它的产品的创建、组合和表示时
- * 2、一个系统要由多个产品系列中的一个来配置时。
- * 3、当你要强调一系列相关产品对象的设计以便进行联合使用时。
- * 4、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 被吃对象抽象类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- abstract class Herbivore {
- /**
- * 抽象类对象名称
- *
- * @return string 被吃对象名称
- *
- */
- public abstract function className();
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 吃对象抽象类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- abstract class Carnivore {
- /**
- * 抽象类对象名称
- *
- * @return string 对象名称
- *
- */
- public abstract function className();
- /**
- * 显示食物链
- *
- * @param Herbivore $h 被吃对象实例
- * @return void void
- *
- */
- public abstract function Eat($h);
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 角马类实现
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class Wildebeest extends Herbivore {
- public function className() {
- return '角马';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 狮子类实现
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class Lion extends Carnivore {
- public function className() {
- return '狮子';
- }
- public function Eat($h) {
- echo $this->className().'吃'.$h->className().'<br />';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 北美犀牛类实现
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class Bison extends Herbivore {
- public function className() {
- return '北美犀牛';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 狼类实现
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class Wolf extends Carnivore {
- public function className() {
- return '狼';
- }
- public function Eat($h) {
- echo $this->className().'吃'.$h->className().'<br />';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 大陆抽象类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- abstract class ContinentFactory {
- /**
- * 创建被吃函数
- *
- * @return Herbivore 被吃对象实例
- *
- */
- public abstract function CreateHerbivore();
- /**
- * 创建吃函数
- *
- * @return Carnivore 吃对象实例
- *
- */
- public abstract function CreateCarnivore();
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 非洲大陆食物链类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class AfricaFactory extends ContinentFactory {
- public function CreateHerbivore() {
- return new Wildebeest();
- }
- public function CreateCarnivore() {
- return new Lion();
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 美洲大陆食物链类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class AmericaFactory extends ContinentFactory {
- public function CreateHerbivore() {
- return new Bison();
- }
- public function CreateCarnivore() {
- return new Wolf();
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 动物类
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- class AnimalWorld {
- /**
- * 被吃对象
- *
- * @var Herbivore
- *
- */
- var $herbivore;
- /**
- * 吃对象
- *
- * @var Carnivore
- *
- */
- var $carnivore;
- /**
- * 构造函数
- *
- * @param ContinentFactory $factory 大陆类实例
- * @return void void
- *
- */
- function AnimalWorld($factory) {
- $this->carnivore=$factory->CreateCarnivore();
- $this->herbivore=$factory->CreateHerbivore();
- }
- /**
- * 显示食物链
- *
- * @return void void
- *
- */
- function RunFoodChain() {
- $this->carnivore->Eat($this->herbivore);
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 测试代码
- * ============================================================================
- * @copyright: http://blog.csdn.net/wkjs
- * @author: 王康
- */
- include_once 'class.Abstract.php';
- $africa=new AfricaFactory();
- $world=new AnimalWorld($africa);
- $world->RunFoodChain();
- $america=new AmericaFactory();
- $world=new AnimalWorld($america);
- $world->RunFoodChain();
- ?>
- 工厂模式之PHP实现
- 简单工厂模式之php实现
- php实现工厂模式
- PHP实现 工厂模式
- php实现工厂模式
- PHP实现工厂模式
- php实现工厂模式
- php之工厂模式
- 设计模式之工厂模式(PHP实现)
- php设计模式之工厂模式(工厂模式实现计算器功能)
- php实现抽象工厂模式
- php之工厂模式和抽象工厂
- php之大话工厂模式
- PHP之简单工厂模式
- PHP设计模式之工厂
- php开发模式之工厂模式定义
- PHP设计模式之:工厂模式
- php 开发模式之工厂模式
- 街舞动作名称
- Eclipse3.4 代码自动提示不见了的解决方法
- 完全免费的手机短信天气预报与免费发送祝福短信(谷歌短信服务)
- 相恋,却不能相依
- C# 中事务的操作 (附实例)
- 工厂模式之PHP实现
- 美国石油大王“洛克菲勒”写给儿子的一封信
- 悬浮窗口的学习
- 老壳petite不完全分析
- 街舞分类
- My Counter
- flex 生成flash在页面上的透明背景
- A Visual Guide to Version Control
- .net中的分布式事务