本文以實例形式較為詳細的介紹了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程序設計有所幫助。