溫馨提示×

溫馨提示×

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

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

使用web工廠方法的效果有哪些

發(fā)布時間:2022-01-13 17:02:42 來源:億速云 閱讀:123 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“使用web工廠方法的效果有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“使用web工廠方法的效果有哪些”吧!

效果


工廠方法不再將與特定應(yīng)用有關(guān)的類綁定到你的代碼中。代碼僅處理Product接口;因此它可以與用戶定義的任何ConcreteProduct類一起使用。

編寫可擴展代碼經(jīng)常做的一件事就是區(qū)分問題領(lǐng)域中共通的部分和該應(yīng)用特定的部分并加以分離。特定部分最常見的入口就是創(chuàng)建對象的位置。工廠方法模式正好提供了一個可以將構(gòu)建特定類的部分分離出來的方法。有了這個方法共通的部分只要面對Product接口編程即可,從結(jié)構(gòu)上保證了共通代碼可以和任何具象Product類一起工作。

工廠方法的一個潛在缺點在于客戶可能僅僅為了創(chuàng)建一個特定的ConcreteProduct對象,就不得不創(chuàng)建Creator的子類。當Creator子類不必需時,客戶現(xiàn)在必然要處理類演化的其他方面;但是當客戶無論如何必須創(chuàng)建Creator的子類時,創(chuàng)建子類也是可行的。

A potential disadvantage of factory methods is that clients might have to subclass the Creator class just to create a particular ConcreteProduct object.Subclassing is fine when the client has to subclass the Creator class anyway, but otherwise the client now must deal with another point of evolution.

這一段的后半部分翻譯不大好理解,和英文原文一起看。工廠方法使用Creator的子類創(chuàng)建ConcreteProduct對象。這是一個潛在的缺點。之所以說是潛在的是因為:如果這個Creator子類本來就是必須的,那么使用工廠方法并不會帶來新的負擔,一切都OK;否則的話,客戶就必須處理演化的其他方面。這里《設(shè)計模式》的作者沒說明其他方面具體指那些方面,作者猜想可能是指子類化Creator類所帶來的負擔吧。

下面是Factory Method模式的另外兩種效果:
1 ) 為子類提供掛鉤(hook)

用工廠方法在一個類的內(nèi)部創(chuàng)建對象通常比直接創(chuàng)建對象更靈活。Factory Method給子類一個掛鉤以提供對象的擴展版本。

在Document的例子中,Document類可以定義一個稱為CreateFileDialog的工廠方法,該方法為打開一個已有的文檔創(chuàng)建默認的文件對話框?qū)ο蟆?Document的子類可以重定義這個工廠方法以定義一個與特定應(yīng)用相關(guān)的文件對話框。在這種情況下,工廠方法就不再抽象了而是提供了一個合理的缺省實現(xiàn)。

使用工廠方法在類內(nèi)部創(chuàng)建對象有兩個含義,首先是將創(chuàng)建對象的代碼封裝在一個成員函數(shù)中,然后是將這個函數(shù)聲明為虛函數(shù)。這樣就為派生類提供了選擇擴展或者不擴展的靈活性。

2) 連接平行的類層次

迄今為止,在我們所考慮的例子中,工廠方法并不往往只是被Creator調(diào)用,客戶可以找到一些有用的工廠方法,尤其在平行類層次的情況下。

構(gòu)建ConcreteProduct的代碼可以被Creator自己使用,有時也會被其他客戶使用。特別是在平行類層次的結(jié)構(gòu)中。

當一個類將它的一些職責委托給一個獨立的類的時候,就產(chǎn)生了平行類層次。

這句話不大好理解,別著急接著看下面的例子。

考慮可以被交互操縱的圖形;也就是說,它們可以用鼠標進行伸展、移動,或者旋轉(zhuǎn)。

我們可以將圖形的伸展,移動或者旋轉(zhuǎn)看作圖形類的一部分職責。

實現(xiàn)這樣一些交互并不總是那么容易,它通常需要存儲和更新在給定時刻記錄操縱狀態(tài)的信息,這個狀態(tài)僅僅在操縱時需要。因此它不需要被保存在圖形對象中。

上述交互操作的實現(xiàn)有一定難度,而且通常需要存儲操作的狀態(tài)。如果真的在各個圖形類的內(nèi)部實現(xiàn)會占據(jù)很大的篇幅。同時這些信息只是在操作是才需要,并不是各個圖形類本質(zhì)的部分?!对O(shè)計模式》作者希望表的的應(yīng)該是:將相互操作這部分職責委托出去的需求是確實存在的。

此外,當用戶操縱圖形時,不同的圖形有不同的行為。例如,將直線圖形拉長可能會產(chǎn)生一個端點被移動的效果,而伸展正文圖形則可能會改變行距。

不同的圖形對于伸展,移動或旋轉(zhuǎn)的處理經(jīng)常會不同。這里說的是對于不同的圖形需要不同的處理類。

有了這些限制,最好使用一個獨立的Manipulator對象實現(xiàn)交互并保存所需要的任何與特定操縱相關(guān)的狀態(tài)。不同的圖形將使用不同的Manipulator子類來處理特定的交互。得到的Manipulator類層次與Figure類層次是平行(至少部分平行),如下圖所示。

使用web工廠方法的效果有哪些

這種圖形類和Manipulaotr類之間的關(guān)系就是平行類。在這個例子中圖形類將控制圖形伸展,移動,旋轉(zhuǎn)的這部分職責委托給了Manipulator類。

Figure類提供了一個CreateManipulator工廠方法,它使得客戶可以創(chuàng)建一個與 Figure相對應(yīng)的Manipulator。Figure子類重定義該方法以返回一個合適的Manipulator子類實例。做為一種選擇,F(xiàn)igure類可以實現(xiàn)CreateManipulator以返回一個默認的Manipulator實例,而Figure子類可以只是繼承這個缺省實現(xiàn)。這樣的Figure類不需要相應(yīng)的Manipulator子類 — 因此該層次只是部分平行的。注意工廠方法是怎樣定義兩個類層次之間的連接的。它將哪些類應(yīng)一同工作工作的信息局部化了。

在這個例子中,通過Figure提供的CreateManipulator工廠方法建立了Figure類和Manipulator類之間的聯(lián)系。

類似的,我們也可以為Figure類設(shè)計CreateSetupDialog工廠方法以建立Figure類和每種圖形的設(shè)定畫面之間的聯(lián)系。

到此,相信大家對“使用web工廠方法的效果有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

web
AI