国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

PHP簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式比較

2019-11-08 19:57:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

php工廠模式概念:工廠模式是一種類,它具有為您創(chuàng)建對(duì)象的某些方法。您可以使用工廠類創(chuàng)建對(duì)象,而不直接使用 new。這樣,如果您想要更改所創(chuàng)建的對(duì)象類型,只需更改該工廠即可。使用該工廠的所有代碼會(huì)自動(dòng)更改。根據(jù)抽象程度不同,PHP工廠模式分為:簡(jiǎn)單工廠模式、工廠方法模式和抽象工廠模式

簡(jiǎn)單工廠模式:

/** *簡(jiǎn)單工廠模式與工廠方法模式比較。 *簡(jiǎn)單工廠又叫靜態(tài)工廠方法模式,這樣理解可以確定,簡(jiǎn)單工廠模式是通過(guò)一個(gè)靜態(tài)方法創(chuàng)建對(duì)象的。  */interface  people {    function  jiehun();}class man implements people{    function jiehun() {        echo '送玫瑰,送戒指!<br>';    }} class women implements people {    function jiehun() {        echo '穿婚紗!<br>';    }} class SimpleFactoty {    // 簡(jiǎn)單工廠里的靜態(tài)方法    static function createMan() {        return new     man;    }    static function createWomen() {        return new     women;    }    } $man = SimpleFactoty::createMan();$man->jiehun();$man = SimpleFactoty::createWomen();$man->jiehun();

工廠方法模式:

<?php/* *工廠方法模式: *定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類決定哪個(gè)類實(shí)例化。 他可以解決簡(jiǎn)單工廠模式中的封閉開(kāi)放原則問(wèn)題。<www.phpddt.com整理> */interface  people {    function  jiehun();}class man implements people{    function jiehun() {        echo '送玫瑰,送戒指!<br>';    }} class women implements people {    function jiehun() {        echo '穿婚紗!<br>';    }} interface  createMan {  // 注意了,這里是簡(jiǎn)單工廠本質(zhì)區(qū)別所在,將對(duì)象的創(chuàng)建抽象成一個(gè)接口。    function create(); }class FactoryMan implements createMan{    function create() {        return  new man;    }}class FactoryWomen implements createMan {    function create() {        return new women;    }} class  Client {    // 簡(jiǎn)單工廠里的靜態(tài)方法    function test() {        $Factory =  new  FactoryMan;        $man = $Factory->create();        $man->jiehun();                $Factory =  new  FactoryWomen;        $man = $Factory->create();        $man->jiehun();    }} $f = new Client;$f->test();

抽象工廠模式: 

<?php/*抽象工廠:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口。 注意:這里和工廠方法的區(qū)別是:一系列,而工廠方法則是一個(gè)。那么,我們是否就可以想到在接口create里再增加創(chuàng)建“一系列”對(duì)象的方法呢?*/interface  people {    function  jiehun();}class Oman implements people{    function jiehun() {        echo '區(qū)別:

簡(jiǎn)單工廠模式:用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品。對(duì)與增加新的產(chǎn)品,無(wú)能為力

工廠模式 :用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品)   抽象工廠 :用來(lái)生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無(wú)能為力;支持增加產(chǎn)品族)  

以上三種工廠 方法在等級(jí)結(jié)構(gòu)和產(chǎn)品族這兩個(gè)方向上的支持程度不同。所以要根據(jù)情況考慮應(yīng)該使用哪種方法

適用范圍:

簡(jiǎn)單工廠模式:

工廠類負(fù)責(zé)創(chuàng)建的對(duì)象較少,客戶只知道傳入工廠類的參數(shù),對(duì)于如何創(chuàng)建對(duì)象不關(guān)心。

工廠方法模式:

當(dāng)一個(gè)類不知道它所必須創(chuàng)建對(duì)象的類或一個(gè)類希望由子類來(lái)指定它所創(chuàng)建的對(duì)象時(shí),當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中得某一個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候,可以使用工廠方法模式。

抽象工廠模式:

一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例何如被創(chuàng)建,組合和表達(dá)的細(xì)節(jié),這對(duì)于所有形態(tài)的工廠模式都是重要的。這個(gè)系統(tǒng)有多于一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其 中某一產(chǎn)品族。同屬于同一個(gè)產(chǎn)品族的產(chǎn)品是在一起使用的,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來(lái)。系統(tǒng)提供一個(gè)產(chǎn)品類的庫(kù),所有的產(chǎn)品以同樣的接口出現(xiàn),從 而使客戶端不依賴于實(shí)現(xiàn)。

無(wú)論是簡(jiǎn)單工廠模式、工廠模式還是抽象工廠模式,它們本質(zhì)上都是將不變的部分提取出來(lái),將可變的部分留作接口,以達(dá)到最大程度上的復(fù)用。究竟用哪種設(shè)計(jì)模式更適合,這要根據(jù)具體的業(yè)務(wù)需求來(lái)決定。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜川县| 通化县| 汝南县| 始兴县| 五峰| 瑞昌市| 大方县| 高陵县| 岳阳县| 黄山市| 聂拉木县| 长汀县| 本溪市| 福安市| 柘城县| 娄底市| 兰坪| 青铜峡市| 吴旗县| 高密市| 唐山市| 德令哈市| 蓝田县| 宣城市| 汕头市| 兴隆县| 湘潭市| 海丰县| 玉门市| 河东区| 鄢陵县| 武川县| 安徽省| 北票市| 阿鲁科尔沁旗| 中方县| 绥德县| 陵川县| 吉安县| 台江县| 花莲市|