中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

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

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

效果


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

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

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

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的子類創建ConcreteProduct對象。這是一個潛在的缺點。之所以說是潛在的是因為:如果這個Creator子類本來就是必須的,那么使用工廠方法并不會帶來新的負擔,一切都OK;否則的話,客戶就必須處理演化的其他方面。這里《設計模式》的作者沒說明其他方面具體指那些方面,作者猜想可能是指子類化Creator類所帶來的負擔吧。

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

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

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

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

2) 連接平行的類層次

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

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

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

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

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

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

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

上述交互操作的實現有一定難度,而且通常需要存儲操作的狀態。如果真的在各個圖形類的內部實現會占據很大的篇幅。同時這些信息只是在操作是才需要,并不是各個圖形類本質的部分。《設計模式》作者希望表的的應該是:將相互操作這部分職責委托出去的需求是確實存在的。

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

不同的圖形對于伸展,移動或旋轉的處理經常會不同。這里說的是對于不同的圖形需要不同的處理類。

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

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

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

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

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

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

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

向AI問一下細節

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

web
AI

龙陵县| 延川县| 博白县| 武强县| 武夷山市| 五华县| 普兰县| 海盐县| 舞钢市| 呼伦贝尔市| 景泰县| 湘阴县| 西安市| 海盐县| 云梦县| 新建县| 武夷山市| 阳城县| 珠海市| 平昌县| 襄垣县| 莆田市| 平定县| 安泽县| 霍林郭勒市| 大同市| 乌恰县| 墨竹工卡县| 平塘县| 南安市| 丰台区| 天等县| 晋城| 犍为县| 抚顺市| 佛山市| 花莲市| 淄博市| 那坡县| 楚雄市| 华坪县|