登录  /  注册

php设计模式之简单工厂模式详解_PHP

php中文网
发布: 2016-05-31 19:29:52
原创
583人浏览过

本文以实例形式较为详细的介绍了php设计模式的简单工厂模式,对于进行php程序设计来说有很好的借鉴作用。具体如下:

一、概念

简单工厂模式 【静态工厂方法模式】(Static Factory Method)
是类的创建模式

工厂模式的几种形态:

1、简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method)

2、工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory)

3、抽象工厂模式(Abstract Factory)又叫做 工具箱模式(ToolKit)

二、配图分析:

三、代码实例

该实例代码经过测试可以运行,具体如下:

<&#63;php
/**
 * 一个事例
 *
 * 一个农场,要向市场销售水果
 * 农场里有三种水果 苹果、葡萄
 * 我们设想:1、水果有多种属性,每个属性都有不同,但是,他们有共同的地方 | 生长、种植、收货、吃
 *       2、将来有可能会增加新的水果、我们需要定义一个接口来规范他们必须实现的方法
 *       3、我们需要获取某个水果的类,要从农场主那里去获取某个水果的实例,来知道如何生长、种植、收货、吃
 */


/**
 * 虚拟产品接口类
 * 定义好需要实现的方法
 */

interface fruit{

  /**
   * 生长
   */
  public function grow();

  /**
   * 种植
   */
  public function plant();

  /**
   * 收获
   */
  public function harvest();

  /**
   * 吃
   */
  public function eat();
  
}

/**
 * 定义具体产品类 苹果
 * 首先,我们要实现所继承的接口所定义的方法
 * 然后定义苹果所特有的属性,以及方法
 */
class apple implements fruit{

  //苹果树有年龄
  private $treeAge;

  //苹果有颜色
  private $color;

  public function grow(){
    echo "grape grow";
  }

  public function plant(){
    echo "grape plant";
  }

  public function harvest(){
    echo "grape harvest";
  }

  public function eat(){
    echo "grape eat";
  }

  //取苹果树的年龄
  public function getTreeAge(){
    return $this->treeAge;
  }

  //设置苹果树的年龄
  public function setTreeAge($age){
    $this->treeAge = $age;
    return trie;
  }

}

/**
 * 定义具体产品类 葡萄
 * 首先,我们要实现所继承的接口所定义的方法
 * 然后定义葡萄所特有的属性,以及方法
 */
class grape implements fruit{

  //葡萄是否有籽
  private $seedLess;

  public function grow(){
    echo "apple grow";
  }

  public function plant(){
    echo "apple plant";
  }

  public function harvest(){
    echo "apple harvest";
  }

  public function eat(){
    echo "apple eat";
  }

  //有无籽取值
  public function getSeedLess(){
    return $this->seedLess;
  }

  //设置有籽无籽
  public function setSeedLess($seed){
    $this->seedLess = $seed;
    return true;
  }
}

/**
 *农场主类 用来获取实例化的水果
 *
 */
class farmer{

  //定义个静态工厂方法
  public static function factory($fruitName){
    switch ($fruitName) {
      case 'apple':
        return new apple();
        break;
      case 'grape':
        return new grape();
        break;
      default:
        throw new badFruitException("Error no the fruit", 1);
        break;
    }
  }
}

class badFruitException extends Exception{
  public $msg;
  public $errType;
  public function __construct($msg = '' , $errType = 1){
    $this->msg = $msg;
    $this->errType = $errType;
  }  
}

/**
 * 获取水果实例化的方法
 */
try{
  $appleInstance = farmer::factory('apple');
  var_dump($appleInstance);
}catch(badFruitException $err){
  echo $err->msg . "_______" . $err->errType;
}

登录后复制

希望本文所述实例对大家PHP程序设计有所帮助。

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号