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


Posted in PHP onSeptember 04, 2014

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

一、概念

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

工厂模式的几种形态:

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

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

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

二、配图分析:

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

三、代码实例

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

<?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 相关文章推荐
安装APACHE
Jan 15 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
基于php 随机数的深入理解
Jun 05 PHP
解析PHP提交后跳转
Jun 23 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
实例讲解PHP页面静态化
Feb 05 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
Laravel框架表单验证详解
Sep 04 #PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 #PHP
深入分析PHP引用(&amp;)
Sep 04 #PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 #PHP
CodeIgniter框架URL路由总结
Sep 03 #PHP
Yii 快速,安全,专业的PHP框架
Sep 03 #PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 #PHP
You might like
php 代码优化的42条建议 推荐
2009/09/25 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
简单学习vue指令directive
2016/11/03 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
应用数学自荐书范文
2013/11/24 职场文书
社区工作者思想汇报
2014/01/13 职场文书
留学推荐信范文
2014/05/10 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
预备党员介绍人意见
2015/06/01 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016年五一促销广告语
2016/01/28 职场文书