php設(shè)計(jì)模式之簡單工廠模式詳解
本文以實(shí)例形式較為詳細(xì)的介紹了PHP設(shè)計(jì)模式的簡單工廠模式,對(duì)于進(jìn)行PHP程序設(shè)計(jì)來說有很好的借鑒作用。具體如下:
一、概念
簡單工廠模式 【靜態(tài)工廠方法模式】(Static Factory Method)
是類的創(chuàng)建模式
工廠模式的幾種形態(tài):
1、簡單工廠模式(Simple Factory)又叫做 靜態(tài)工廠方法模式(Static Factory Method)
2、工廠方法模式(Factory Method)又叫做 多態(tài)性工廠模式(Polymorphic Factory)
3、抽象工廠模式(Abstract Factory)又叫做 工具箱模式(ToolKit)
二、配圖分析:

三、代碼實(shí)例
該實(shí)例代碼經(jīng)過測試可以運(yùn)行,具體如下:
<?php
/**
* 一個(gè)事例
*
* 一個(gè)農(nóng)場,要向市場銷售水果
* 農(nóng)場里有三種水果 蘋果、葡萄
* 我們?cè)O(shè)想:1、水果有多種屬性,每個(gè)屬性都有不同,但是,他們有共同的地方 | 生長、種植、收貨、吃
* 2、將來有可能會(huì)增加新的水果、我們需要定義一個(gè)接口來規(guī)范他們必須實(shí)現(xiàn)的方法
* 3、我們需要獲取某個(gè)水果的類,要從農(nóng)場主那里去獲取某個(gè)水果的實(shí)例,來知道如何生長、種植、收貨、吃
*/
/**
* 虛擬產(chǎn)品接口類
* 定義好需要實(shí)現(xiàn)的方法
*/
interface fruit{
/**
* 生長
*/
public function grow();
/**
* 種植
*/
public function plant();
/**
* 收獲
*/
public function harvest();
/**
* 吃
*/
public function eat();
}
/**
* 定義具體產(chǎn)品類 蘋果
* 首先,我們要實(shí)現(xiàn)所繼承的接口所定義的方法
* 然后定義蘋果所特有的屬性,以及方法
*/
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;
}
//設(shè)置蘋果樹的年齡
public function setTreeAge($age){
$this->treeAge = $age;
return trie;
}
}
/**
* 定義具體產(chǎn)品類 葡萄
* 首先,我們要實(shí)現(xiàn)所繼承的接口所定義的方法
* 然后定義葡萄所特有的屬性,以及方法
*/
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;
}
//設(shè)置有籽無籽
public function setSeedLess($seed){
$this->seedLess = $seed;
return true;
}
}
/**
*農(nóng)場主類 用來獲取實(shí)例化的水果
*
*/
class farmer{
//定義個(gè)靜態(tài)工廠方法
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;
}
}
/**
* 獲取水果實(shí)例化的方法
*/
try{
$appleInstance = farmer::factory('apple');
var_dump($appleInstance);
}catch(badFruitException $err){
echo $err->msg . "_______" . $err->errType;
}
希望本文所述實(shí)例對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
ThinkPHP使用PHPExcel實(shí)現(xiàn)Excel數(shù)據(jù)導(dǎo)入導(dǎo)出完整實(shí)例
這篇文章主要介紹了ThinkPHP使用PHPExcel實(shí)現(xiàn)Excel數(shù)據(jù)導(dǎo)入導(dǎo)出,非常實(shí)用的功能,需要的朋友可以參考下2014-07-07
PHP數(shù)組無限分級(jí)數(shù)據(jù)的層級(jí)化處理代碼
在很多朋友寫無限級(jí)分類數(shù)據(jù)時(shí)都直接使用遞歸來操作,下面我來介紹一下關(guān)于PHP無限分級(jí)代碼優(yōu)化方法,有需要的朋友可參考一下2012-12-12
WordPress開發(fā)中短代碼的實(shí)現(xiàn)及相關(guān)函數(shù)使用技巧
這篇文章主要介紹了WordPress開發(fā)中短代碼的實(shí)現(xiàn)及相關(guān)函數(shù)使用技巧,文中講到了add_shortcode函數(shù)和shortcode_atts函數(shù)的用法,需要的朋友可以參考下2016-01-01
深入for,while,foreach遍歷時(shí)間比較的詳解
本篇文章是對(duì)for,while,foreach遍歷時(shí)間比較進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞
PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問題,遠(yuǎn)程攻擊者可利用此漏洞對(duì)應(yīng)用程序進(jìn)行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。2011-01-01
php去掉URL網(wǎng)址中帶有PHPSESSID的配置方法
這篇文章主要介紹了php開發(fā)的網(wǎng)站網(wǎng)址中帶有PHPSESSID的解決辦法,也就是把PHP的跨頁傳遞SESSION選擇在php.ini中關(guān)閉,這樣這個(gè)參數(shù)就不會(huì)出現(xiàn)在URL中了,需要的朋友可以參考下2014-07-07
php實(shí)現(xiàn)漢字驗(yàn)證碼和算式驗(yàn)證碼的方法
這篇文章主要介紹了php實(shí)現(xiàn)漢字驗(yàn)證碼和算式驗(yàn)證碼的方法,實(shí)例分析了算式驗(yàn)證碼及中文漢字驗(yàn)證碼的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03

