Java設計形式編程之工場辦法形式的應用。本站提示廣大學習愛好者:(Java設計形式編程之工場辦法形式的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式編程之工場辦法形式的應用正文
界說:界說一個用於創立對象的接口,讓子類決議實例化哪個類,工場辦法使一個類的實例化延遲到其子類。
類型:創立類形式
類圖:
工場辦法形式代碼
interface IProduct { public void productMethod(); } class Product implements IProduct { public void productMethod() { System.out.println("產物"); } } interface IFactory { public IProduct createProduct(); } class Factory implements IFactory { public IProduct createProduct() { return new Product(); } } public class Client { public static void main(String[] args) { IFactory factory = new Factory(); IProduct prodect = factory.createProduct(); prodect.productMethod(); } }
工場形式:
起首須要說一下工場形式。工場形式依據籠統水平的分歧分為三種:簡略工場形式(也叫靜態工場形式)、本文所講述的工場辦法形式、和籠統工場形式。工場形式是編程中常常用到的一種形式。它的重要長處有:
可使代碼構造清楚,有用地封裝變更。在編程中,產物類的實例化有時刻是比擬龐雜和多變的,經由過程工場形式,將產物的實例化封裝起來,使得挪用者基本無需關懷產物的實例化進程,只需依附工場便可獲得本身想要的產物。
對換用者屏障詳細的產物類。假如應用工場形式,挪用者只關懷產物的接口便可以了,至於詳細的完成,挪用者基本無需關懷。即便變革了詳細的完成,對換用者來講沒有任何影響。
下降耦合度。產物類的實例化平日來講是很龐雜的,它須要依附許多的類,而這些類關於挪用者來講基本無需曉得,假如應用了工場辦法,我們須要做的僅僅是實例化好產物類,然後交給挪用者應用。對換用者來講,產物所依附的類都是通明的。
工場辦法形式:
經由過程工場辦法形式的類圖可以看到,工場辦法形式有四個要素:
工場接口。工場接口是工場辦法形式的焦點,與挪用者直接交互用來供給產物。在現實編程中,有時刻也會應用一個籠統類來作為與挪用者交互的接口,其實質上是一樣的。
工場完成。在編程中,工場完成決議若何實例化產物,是完成擴大的門路,須要有若干種產物,就須要有若干個詳細的工場完成。
產物接口。產物接口的重要目標是界說產物的標准,一切的產物完成都必需遵守產物接口界說的標准。產物接口是挪用者最為關懷的,產物接口界說的好壞直接決議了挪用者代碼的穩固性。異樣,產物接口也能夠用籠統類來取代,但要留意最好不要違背裡氏調換准繩。
產物完成。完成產物接口的詳細類,決議了產物在客戶端中的詳細行動。
工場辦法形式的長處:
1. 優越的封裝性,下降模塊間的耦合;
2. 面向產物接口,屏障產物類。
3. 典范的解耦框架。高層模塊只須要曉得產物的籠統類。
4. 相符迪米特軌則、依附顛倒准繩、裡氏調換准繩。
實用場景:
不論是簡略工場形式,工場辦法形式照樣籠統工場形式,他們具有相似的特征,所以他們的實用場景也是相似的。
起首,作為一種創立類形式,在任何須要生成龐雜對象的處所,都可使用工場辦法形式。有一點須要留意的處所就是龐雜對象合適應用工場形式,而簡略對象,特殊是只須要經由過程new便可以完成創立的對象,無需應用工場形式。假如應用工場形式,就須要引入一個工場類,會增長體系的龐雜度。
其次,工場形式是一種典范的解耦形式,迪米特軌則在工場形式中表示的尤其顯著。假設挪用者本身組裝產物須要增長依附關系時,可以斟酌應用工場形式。將會年夜年夜下降對象之間的耦合度。
再次,因為工場形式是依附籠統架構的,它把實例化產物的義務交由完成類完成,擴大性比擬好。也就是說,當須要體系有比擬好的擴大性時,可以斟酌工場形式,分歧的產物用分歧的完成工場來組裝。
典范運用
要解釋工場形式的長處,能夠沒有比組裝汽車更適合的例子了。場景是如許的:汽車由動員機、輪、底盤構成,如今須要組裝一輛車交給挪用者。假設不應用工場形式,代碼以下:
class Engine { public void getStyle(){ System.out.println("這是汽車的動員機"); } } class Underpan { public void getStyle(){ System.out.println("這是汽車的底盤"); } } class Wheel { public void getStyle(){ System.out.println("這是汽車的輪胎"); } } public class Client { public static void main(String[] args) { Engine engine = new Engine(); Underpan underpan = new Underpan(); Wheel wheel = new Wheel(); ICar car = new Car(underpan, wheel, engine); car.show(); } }
可以看到,挪用者為了組裝汽車還須要別的實例化動員機、底盤和輪胎,而這些汽車的組件是與挪用者有關的,嚴重違背了迪米特軌則,耦合度太高。而且異常晦氣於擴大。別的,本例中動員機、底盤和輪胎照樣比擬詳細的,在現實運用中,能夠這些產物的組件也都是籠統的,挪用者基本不曉得如何組裝產物。假設應用工場辦法的話,全部架構就顯得清楚了很多。
interface IFactory { public ICar createCar(); } class Factory implements IFactory { public ICar createCar() { Engine engine = new Engine(); Underpan underpan = new Underpan(); Wheel wheel = new Wheel(); ICar car = new Car(underpan, wheel, engine); return car; } } public class Client { public static void main(String[] args) { IFactory factory = new Factory(); ICar car = factory.createCar(); car.show(); } }
應用工場辦法後,挪用真個耦合度年夜年夜下降了。而且關於工場來講,是可以擴大的,今後假如想組裝其他的汽車,只須要再增長一個工場類的完成便可以。不管是靈巧性照樣穩固性都獲得了極年夜的進步。
PS:工場辦法形式與簡略工場形式
前文提到的簡略工場形式跟工場辦法形式極其類似,工場辦法類的焦點是一個籠統工場類,而簡略工場形式把焦點放在一個詳細類上。工場辦法形式與簡略工場形式再構造上的分歧不是很顯著。