• 技术文章 >后端开发 >php教程

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

    2016-05-16 20:36:38原创389
    本文以实例形式较为详细的介绍了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程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Fedora下安装php Redis扩展笔记_php技巧 下一篇:PHP实现数组递归转义的方法_php技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 整理总结nginx、php-fpm和mysql等的权限划分• php url地址重写的有关问题 • js 弹窗出现乱码了解决方案 • .htaccess怎么解决网站首页url的有关问题 • 拾掇活:PHP的日期时间函数date()
    1/1

    PHP中文网