PHP設計模式之工廠模式

2021-09-18 00:06:53 字數 3869 閱讀 9335

工廠模式是我們最常用的例項化物件模式,是用工廠方法代替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...