溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在什么情況下可以使用web工廠方法

發(fā)布時(shí)間:2022-01-13 16:59:52 來源:億速云 閱讀:153 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹了在什么情況下可以使用web工廠方法的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇在什么情況下可以使用web工廠方法文章都會(huì)有所收獲,下面我們一起來看看吧。

適用性

在下列情況下可以使用Factory Method模式:
? 當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象的類的時(shí)候。

當(dāng)一個(gè)類需要?jiǎng)?chuàng)建某種對(duì)象卻無法事先知道它的類型信息的時(shí)候。例如前文提到的應(yīng)用/文檔架構(gòu)。這個(gè)架構(gòu)的使用者是開發(fā)人員,開發(fā)的應(yīng)用也成千上萬,架構(gòu)的提供者當(dāng)然沒有辦法知道需要?jiǎng)?chuàng)建對(duì)象的類型??梢允褂霉S方法模式?jīng)Q定所要?jiǎng)?chuàng)建的對(duì)象類型。

這種情況是真不知道。

? 當(dāng)一個(gè)類希望由它的子類來指定它所創(chuàng)建的對(duì)象的時(shí)候。

如果我們的設(shè)計(jì)面向的不是通用的架構(gòu),只是一個(gè)具體的應(yīng)用場(chǎng)景,那么大多數(shù)情況下我們可以知道(至少是知道大部分)需要?jiǎng)?chuàng)建對(duì)象的具體類型。但是出于某種考慮(將來的擴(kuò)展,分散開發(fā)的需求等等),仍然希望將創(chuàng)建實(shí)際對(duì)象的職責(zé)交給其子類。

這種情況是裝不知道。


? 當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中的某一個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候。

這句話很難理解,還是看原文。

classes delegate responsibility to one of several helper subclasses, and
you want to localize the knowledge of which helper subclass is the delegate.

原文前半句中委托的職責(zé)并沒有明確指出是創(chuàng)建對(duì)象的職責(zé),很大的可能是翻譯不準(zhǔn)確。以下結(jié)合實(shí)例說明作者的理解,類圖如下:

在什么情況下可以使用web工廠方法

我們的例子是圖形編輯軟件,支持Rect和Circle兩種圖形,它們都是Shape類的子類。另外,由于某種原因(例如我們希望將來圖形可以在不同的操作系統(tǒng)中表示)我們希望將它們的圖形的描畫功能委托給RectDrawer和CircleDrawer兩個(gè)幫助子類。如上圖所示,由于使用了工廠方法模式創(chuàng)建不同的Drawer子類。關(guān)于描畫功能具體委托給了哪個(gè)Drawer子類的信息都被限制在了具體的圖形子類中。

關(guān)于“在什么情況下可以使用web工廠方法”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“在什么情況下可以使用web工廠方法”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

web
AI