首頁 > 後端開發 > php教程 > php之工廠模式與抽象工廠

php之工廠模式與抽象工廠

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-29 08:56:55
原創
1094 人瀏覽過

最近在看工廠模式和抽象工廠模式,把深入php那本書的這一塊看了兩遍,可還是迷迷糊糊的,於是去問了度娘,我覺得有篇博文裡這麼說的很有道理:

工廠方法
工廠方法是針對每種產品提供一個工廠類別。透過不同的工廠實例來創建不同的產品實例。
在同一等級結構中,支援增加任意產品。

抽象工廠
抽象工廠是應對產品族概念的。比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那麼每個工廠都要有創建轎車,貨車和客車的方法。
應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。

具體見博文

簡而言之,工廠方法是生產同一等級的不同產品,而抽象工廠是生產不同的產品族,而往往抽象工廠中會用到工廠方法。


首先介紹一下工廠方法。
假設我有一個人事管理項目,它需要管理Appointment(預約)對象,被要求用BloggsCal或者MegaCal的格式來和他們交流預約,當然隨著時間的發展,要求的格式肯定會變多。 (在我看來這裡面的格式就相當於工廠模式中的產品啦)
在介面層級上我們可以定義出兩個類別。其一是需要一個把Appointment物件轉換成一個專有格式,把它命名為AppEncoder類別(產品product),另外一個需要管理員來取得這個編碼器,我們把它命名為CommsManager類別(創建者creator)。
接下來我們上程式碼了:

<code><span>abstract</span><span><span>class</span><span>ApptEncoder</span>{</span><span>abstract</span><span><span>function</span><span>encode</span><span>()</span>;</span>
}
<span><span>class</span><span>BloggsApptEncoder</span><span>extends</span><span>ApptEncoder</span>{</span><span><span>function</span><span>encode</span><span>()</span>{</span><span>return</span><span>"Appointment data encode in BloggsCal format \n"</span>;
    }
}
<span>abstract</span><span><span>class</span><span>CommsManager</span>{</span><span>abstract</span><span><span>function</span><span>getHeadText</span><span>()</span>;</span><span>abstract</span><span><span>function</span><span>getApptEncoder</span><span>()</span>;</span><span>abstract</span><span><span>function</span><span>getFooterText</span><span>()</span>;</span>
}
<span><span>class</span><span>BloggsCommsManager</span><span>extends</span><span>CommsManager</span>{</span><span><span>function</span><span>getHeadText</span><span>()</span>{</span><span>return</span><span>"BloggsCal header\n"</span>;
    }
    <span><span>function</span><span>getApptEncoder</span><span>()</span>{</span><span>return</span><span>new</span> BloggsApptEncoder();
    }
    <span><span>function</span><span>getFooterText</span><span>()</span>{</span><span>return</span><span>"BloggsCal footer \n"</span>;
    }
}</code>
登入後複製

這裡面我只寫了一個BloggsCal格式,相當於做了一個產品,如果再加入別的如MegaCal格式時只要繼承ApptEncoder類別和CommsManager類別就行了,這就是工廠方法。
但是有沒有發現這種模式形成了一種特殊的程式碼重複,而且可能會導致不必要的實例化,所以使用的時候要考慮清楚再使用工廠模式

下面介紹一下抽象工廠,
上面說過工廠模式是用來生產不同產品的而抽象工廠是用來生成不同產品族。那我們接著上個例子來看。
這時候專案不再滿足只有一個Appointment(預約)功能了,他需要增加Ttd(待辦事宜)和Contact(聯絡人)的功能,這就是增加產品族了,我把類別圖寫上來吧,省的寫程式了,而且也更清楚一些。
php之工廠模式與抽象工廠

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介紹了php之工廠模式和抽象工廠,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
JQ 用AJAX提交帶檔案上傳的表單問題
來自於 1970-01-01 08:00:00
0
0
0
PHP檔案執行問題
來自於 1970-01-01 08:00:00
0
0
0
運行PHP檔案變為下載
來自於 1970-01-01 08:00:00
0
0
0
PHP運行
來自於 1970-01-01 08:00:00
0
0
0
作業的答案問題
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板