程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式編程之工場辦法形式的應用

Java設計形式編程之工場辦法形式的應用

編輯:關於JAVA

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:工場辦法形式與簡略工場形式

        前文提到的簡略工場形式跟工場辦法形式極其類似,工場辦法類的焦點是一個籠統工場類,而簡略工場形式把焦點放在一個詳細類上。工場辦法形式與簡略工場形式再構造上的分歧不是很顯著。  

  1.         工場辦法形式之所以有一個體名叫多態性工場形式是由於詳細工場類都有配合的接口,或許有配合的籠統父類。
  2.   當體系擴大須要添加新的產物對象時,僅僅須要添加一個詳細對象和一個詳細工場對象,原有工場對象不須要停止任何修正,也不須要修正客戶端,很好的相符了"開放-關閉"准繩。而簡略工場形式在添加新產物對象後不能不修正工場辦法,擴大性欠好。
  3.   工場辦法形式退步後可以演化成簡略工場形式。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved