工廠模式是我們最常用的例項化物件模式,是用工廠方法代替new操作的一種模式。
使用工廠模式的好處是,如果你想要更改所例項化的類名等,則只需更改該工廠方法內容即可,不需逐一尋找**中具體例項化的地方(new處)修改了。為系統結構提供靈活的動態擴充套件機制,減少了耦合。
根據抽象程度的不同,php工廠模式分為三種:
簡單工廠模式
工廠方法模式
抽象工廠模式
簡單工廠模式又稱靜態工廠方法模式
,之所以可以這麼說,是因為簡單工廠模式是通過乙個靜態方法
來建立物件的。
**示例:
<?php
header('content-type:text/html;charset=utf-8');
/** *簡單工廠模式(靜態工廠方法模式)
*//**
* inte***ce people 人類
*/inte***ce people
/** * class man 繼承people的男人類
*/class man implements people
}/**
* class women 繼承people的女人類
*/class women implements people
}/**
* class ******factoty 工廠類
*/class ******factoty
// 簡單工廠裡的靜態方法-用於建立女人物件
static function createwomen()
}/**
* 具體呼叫
*/$man = ******factoty::createman();
$man->say();
$woman = ******factoty::createwomen();
$woman->say();
執行結果:
我是男人
我是女人
定義乙個用於建立物件的介面,讓子類決定哪個類例項化。 他可以解決簡單工廠模式中的封閉開放原則問題。
看**:
<?php
header('content-type:text/html;charset=utf-8');
/* *工廠方法模式
*//**
* inte***ce people 人類
*/inte***ce people
/** * class man 繼承people的男人類
*/class man implements people
}/**
* class women 繼承people的女人類
*/class women implements people
}/**
* inte***ce createpeople 建立人物類
* 注意:與上面簡單工廠模式對比。這裡本質區別在於,此處是將物件的建立抽象成乙個介面。
*/inte***ce createpeople
/** * class factoryman 繼承createpeople的工廠類-用於例項化男人類
*/class factoryman implements createpeople
}/**
* class factoryman 繼承createpeople的工廠類-用於例項化女人類
*/class factorywomen implements createpeople
}/**
* class client 操作具體類
*/class client
}// 執行
$demo = new client;
$demo->test();
看結果:
我是男人-hi
我是女人-hi
提供乙個建立一系列相關或相互依賴物件的介面。
注意:這裡和工廠方法的區別是:一系列(多個),而工廠方法只有乙個。
**:
<?php
header('content-type:text/html;charset=utf-8');
/* * 抽象工廠模式
*//**
* inte***ce people 人類
*/inte***ce people
/** * class oneman 第乙個男人類-繼承people
*/class oneman implements people
}/**
* class twoman 第二個男人類-繼承people
*/class twoman implements people
}/**
* class onewomen 第乙個女人類-繼承people
*/class onewomen implements people
}/**
* class twowomen 第二個女人類-繼承people
*/class twowomen implements people
}/**
* inte***ce createpeople 建立物件類
* 注意:這裡將物件的建立抽象成了乙個介面。
*/inte***ce createpeople
/** * class factoryman 用於建立男人物件的工廠類-繼承createpeople
*/class factoryman implements createpeople
// 建立第二個男人
public function createtwo()
}/**
* class factorywomen 用於建立女人物件的工廠類-繼承createpeople
*/class factorywomen implements createpeople
// 建立第二個女人
public function createtwo()
}/**
* class client 執行測試類
*/class client
}// 執行
$demo = new client;
$demo->test();
結果:
男1:我喜歡你
男2:我看上你了
女1:我不喜歡你
女2:滾一邊玩去
簡單工廠模式(靜態方法工廠模式) : 用來生產同一等級結構中的任意產品。(不能增加新的產品)
工廠模式 :用來生產同一等級結構中的固定產品。(支援增加任意產品)
抽象工廠 :用來生產不同產品種類的全部產品。(不能增加新的產品,支援增加產品種類)
簡單工廠模式:
工廠類負責建立的物件較少,操作時只需知道傳入工廠類的引數即可,對於如何建立物件過程不用關心。
工廠方法模式:
滿足以下條件時,可以考慮使用工廠模式方法
當乙個類不知道它所必須建立物件的類時
乙個類希望由子類來指定它所建立的物件時
當類將建立物件的職責委託給多個幫助子類中得某乙個,並且你希望將哪乙個幫助子類是**者這一資訊區域性化的時
抽象工廠模式:
滿足以下條件時,可以考慮使用抽象工廠模式
系統不依賴於產品類例項如何被建立,組合和表達的細節。
系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品
同屬於同乙個產品族是在一起使用的。這一約束必須在系統的設計中體現出來。
系統提供乙個產品類的庫,所有產品以同樣的介面出現,從而使客戶端不依賴於實現。
以上幾種,歸根結底,都是將重複的東西提取出來,以方便整體解耦和復用,修改時方便。可根據具體需求而選擇使用。
php設計模式之工廠模式
一直都對php的設計模式有著一種特殊的 情結 從最開始接觸到的單例模式,到經典的mvc設計模式,每次的接觸都讓我為之驚奇。買了本php設計模式在家看,發現,都是專有名詞,再加上太專業的術語,讓我沒有看下去的勇氣。無意之中逛論壇,發現乙個部落格,關於php的五種設計模式,其中就有工廠模式。看完後,第一...
php設計模式之工廠模式
工廠模式的最大優點在於建立物件上面,就是把建立物件的過程封裝起來,這樣隨時可以產生乙個新的物件。減少 進行複製粘帖,耦合關係重,牽一發動其他部分 通俗的說,以前建立乙個物件要使用new 現在把這個過程封裝起來了。假設不使用工廠模式 那麼很多地方呼叫類a 就會這樣子建立乙個例項 new a 假設某天需...
php模式設計之 工廠模式
那麼何為工廠模式?從名字來看,似乎看不出什麼端倪。工廠模式,和生產有關?還是和生產流程 子了,所謂工廠模式還真和生產有關。生產什麼呢?生產出來的是乙個例項物件。通過什麼裝置生產?通過乙個工廠類生產。怎麼生產呢?工廠類呼叫自身靜態方法 來生產物件例項。工廠模式有乙個關鍵的構造,根據一般原則命名為fac...