程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php設計模式之簡單工廠模式詳解,php設計模式詳解

php設計模式之簡單工廠模式詳解,php設計模式詳解

編輯:關於PHP編程

php設計模式之簡單工廠模式詳解,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設計模式: 寫出工廠模式與單態模式的PHP5示例代碼

Example #1 調用工廠方法(帶參數)

<?php
class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
------------------------------------
Example #2 單例模式

<?php
class Example
{
// 保存類實例在此屬性中
private static $instance;

// 構造方法聲明為private,防止直接創建對象
private function __construct()
{
echo 'I am constructed';
}

// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}

return self::$instance;
}

// Example類中的普通方法
public function bark()
{
echo 'Woof!';
}

// 阻止用戶復制對象實例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}

}

?>
 

設計模式簡單工廠模式

工廠是指生產實例的地方。那就簡單一個,直接命名為createInstance()。此方法通常是靜態的,而且還會帶有參數和返回值。舉個例子:例如牛、羊、馬、狗都繼承動物類,那createInstance()的返回值應該為 動物(因為工廠就是生產動物的嘛,所以返回值也應該為動物),參數應該為動物名稱(這樣工廠根據名稱才知道你要生產哪種動物啊)。這樣就可以根據傳入的的動物名稱,產生一個動物實例。createInstance的實現:switch(動物名稱) case 牛:return new 牛();case 羊:return new 羊();case 馬:return new 馬();case 狗:return new 狗();
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved