- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 意图:
- * 提供一个创建一系列相关或依赖对象的接口,而无需指定他们具体的类。
- * 适用性:
- * 1、一个系统要独立于它的产品的创建、组合和表示时
- * 2、一个系统要由多个产品系列中的一个来配置时。
- * 3、当你要强调一系列相关产品对象的设计以便进行联合使用时。
- * 4、当你提供一个产品类库,而只想显示它们的接口而不是实现时。
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/wkjs
- * @author: 王康
- */
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 被吃对象抽象类
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/wkjs
- * @author: 王康
- */
- abstract class Herbivore {
- /**
- * 抽象类对象名称
- *
- * @return string 被吃对象名称
- *
- */
- public abstract function className();
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 吃对象抽象类
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/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.youkuaiyun.com/wkjs
- * @author: 王康
- */
- class Wildebeest extends Herbivore {
- public function className() {
- return '角马';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 狮子类实现
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/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.youkuaiyun.com/wkjs
- * @author: 王康
- */
- class Bison extends Herbivore {
- public function className() {
- return '北美犀牛';
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 狼类实现
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/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.youkuaiyun.com/wkjs
- * @author: 王康
- */
- abstract class ContinentFactory {
- /**
- * 创建被吃函数
- *
- * @return Herbivore 被吃对象实例
- *
- */
- public abstract function CreateHerbivore();
- /**
- * 创建吃函数
- *
- * @return Carnivore 吃对象实例
- *
- */
- public abstract function CreateCarnivore();
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 非洲大陆食物链类
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/wkjs
- * @author: 王康
- */
- class AfricaFactory extends ContinentFactory {
- public function CreateHerbivore() {
- return new Wildebeest();
- }
- public function CreateCarnivore() {
- return new Lion();
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 美洲大陆食物链类
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/wkjs
- * @author: 王康
- */
- class AmericaFactory extends ContinentFactory {
- public function CreateHerbivore() {
- return new Bison();
- }
- public function CreateCarnivore() {
- return new Wolf();
- }
- }
- ?>
- <?php
- /**
- * @name: 设计模式--工厂模式
- * ============================================================================
- * 动物类
- * ============================================================================
- * @copyright: http://blog.youkuaiyun.com/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.youkuaiyun.com/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实现
最新推荐文章于 2024-10-15 11:10:24 发布