当前位置: 移动技术网 > IT编程>开发语言>PHP > php设计模式之简单工厂模式详解

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

2019年06月03日  | 移动技术网IT编程  | 我要评论

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

一、概念

简单工厂模式 【静态工厂方法模式】(static factory method)
是类的创建模式

工厂模式的几种形态:

1、简单工厂模式(simple factory)又叫做 静态工厂方法模式(static factory method)

2、工厂方法模式(factory method)又叫做 多态性工厂模式(polymorphic factory)

3、抽象工厂模式(abstract factory)又叫做 工具箱模式(toolkit)

二、配图分析:

三、代码实例

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

<?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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网