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

5年以前  |  阅读数:213 次  |  编程语言:PHP 

本文以实例形式较为详细的介绍了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程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例