您好,登錄后才能下訂單哦!
這篇文章主要講解了“web創建型模式的相關知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“web創建型模式的相關知識點有哪些”吧!
創建型模式的討論
考慮在Prototype模式中描述的繪圖編輯器框架。可以有多種方法通過產品類來參數化GraphicTool:
這里考慮的是通過一個選擇板為系統添加圖形要素的場景。
? 使用Factory Method模式,將為選擇板中的每個Graphic的子類創建一個GraphicTool的子類。GraphicTool將有一個NewGraphic操作,每個GraphicTool的子類都會重定義它。
按照原型模式章節中的解釋,GraphicTool類還要另外具有其他的功能,例如圖形移動,旋轉的功能。這里說的應該是在此基礎上另外構建一個GraphicTool的子類。
? 使用Abstract Factory模式,將有一個GraphicsFactory類層次對應于每個Graphic的子類。在這種情況每個工廠僅創建一個產品:CircleFactory將創建Circle,LineFactory將創建Line,等等。GraphicTool將以創建合適種類Graphic的工廠作為參數。
這里所說的方式是每個工廠構建一個產品的場景。在實際的開發中,也可以為構建產品的工廠方法增加參數,這種方式可以有效減少工廠或者工廠方法的數量。
? 使用Prototype模式,每個Graphic的子類將實現Clone操作,并且Graphi cTool將以它所創建的Graphic的原型作為參數。
這是《設計模式》書中選擇的方式。
究竟哪一種模式最好取決于諸多因素。在我們的繪圖編輯器框架中,第一眼看來,FactoryMethod模式使用是最簡單的。它易于定義一個新的GraphicTool的子類,并且僅當選擇板被定義了的時候,GraphicTool的實例才被創建。它的主要缺點在于GraphicTool子類數目的激增,并且它們都沒有做很多事情。
工廠方法應該是作為一個副業,為現有類增加構建關聯產品的方法使之成為一個宿主類,但是實際使用中經常會出現這種情況:構建新的子類只是為了增加新產品。這就有點過了。
Abstract Factory并沒有很大的改進,因為它需要一個同樣龐大的Graphics Factory類層次。只有當早已存在一個GraphicsFactory類層次時,Abstract Factory才比Factory Method更好一點—或是因為編譯器自動提供(像在Smalltalk或是Objective C中)或是因為系統的其他部分需要這個Gr aphicsFactory類層次。
某種角度來講,抽象工廠只是將工廠方法從宿主類中獨立出來的新類,所以也會具有工廠方法模式類似的問題。
總的來說,Prototype模式對繪圖編輯器框架可能是最好的,因為它僅需要為每個Graphics類實現一個Clone操作。這就減少了類的數目,并且Clone可以用于其他目的而不僅僅是純粹的實例化(例如,一個Duplicate菜單操作)。
這句化換個說法就是對于原型模式的場景來說,原型模式是最合適的。這是當然的事情,要不然原型模式也不會選擇這個場景對吧。在實際的開發中用到原型模式的時候無法回避的是需要解決原型從哪里來的問題。
Factory Method使一個設計可以定制且只略微有一些復雜。其他設計模式需要新的類,而Factory Method只需要一個新的操作。人們通常將Factory Method作為一種標準的創建對象的方法。但是當被實例化的類根本不發生變化或當實例化出現在子類可以很容易重定義的操作中(比如在初始化操作中)時,這就并不必要了。
如果需要將構建產品的代碼分離出來,工廠方法可以作為第一步的選擇。如果不需要改變實例化的類型,或者該類型變化可以和動作的多態同步,也就沒有必要將構建產品的部分獨立出來了。
使用Abstract Factory、Prototype或Builder的設計甚至比使用Factory Method的那些設計更靈活,但它們也更加復雜。通常,設計以使用Factory Method開始,并且當設計者發現需要更大的靈活性時,設計便會向其他創建型模式演化。當你在設計標準之間進行權衡的時候,了解多個模式可以給你提供更多的選擇余地。
更獨立的類意味著更大的靈活性,但同時也意味著更復雜的設計。這是考驗的是設計者選擇的能力,平衡的感覺。當然了作為選擇和平衡的前提,你得先知道有哪些可有的設計模式。
感謝各位的閱讀,以上就是“web創建型模式的相關知識點有哪些”的內容了,經過本文的學習后,相信大家對web創建型模式的相關知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。