欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計模式之工廠方法模式實例簡析

 更新時間:2015年11月06日 11:57:06   作者:freesonhp  
這篇文章主要介紹了Java設(shè)計模式之工廠方法模式,較為詳細的分析了Java工廠模式的功能、定義并給出了實例代碼加以總結(jié)分析,需要的朋友可以參考下

本文實例講述了Java設(shè)計模式之工廠方法模式。分享給大家供大家參考,具體如下:

工廠方法模式使用的頻率非常高,在我們?nèi)粘5拈_發(fā)中總能遇見到它的身影。其定義為:Define an interface for creating an object, but let subclass decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠方法是一個類的實例化延遲到其子類。)

工廠方法模式的優(yōu)點:

1、良好的封裝性,代碼結(jié)構(gòu)清晰。一個對象創(chuàng)建是有條件約束的,如一個調(diào)用者需要一個具體的產(chǎn)品對象,只要知道這個產(chǎn)品的類名(或約束字符串)就可以了,不用知道創(chuàng)建對象的艱辛過程,降低模塊間的耦合。
2、工廠方法模式的擴展性非常優(yōu)秀。在增加產(chǎn)品類的情況下,只要適當?shù)匦薷木唧w的工廠類或者擴展一個工廠類,就可以完成“擁抱變化”。
3、屏蔽產(chǎn)品類。這一點非常重要,產(chǎn)品類的實現(xiàn)如何變化,調(diào)用者都不需要關(guān)心,它只需關(guān)心產(chǎn)品的接口,只要接口保持不變,系統(tǒng)中的上層模塊就不需要發(fā)生變化。因為產(chǎn)品類的實例化是由工廠類負責的,一個產(chǎn)品對象具體由哪一個產(chǎn)品產(chǎn)生是由工廠類決定的。
4、工廠方法模式是典型的解耦框架。。高層模塊值需要知道產(chǎn)品的抽象類,其他的實現(xiàn)類都不用關(guān)心,符合迪米特法則,我們不需要的就不要去交流;也符合依賴倒置原則,只依賴產(chǎn)品的抽象類;當然也符合里氏替換原則,使用產(chǎn)品子類替換產(chǎn)品父類,沒問題。

工廠方法模式的通用代碼如下:

//抽象產(chǎn)品類 
public abstract class Product {
  //產(chǎn)品類的公共方法 
  public void method1() { 
    //業(yè)務邏輯處理 
  } 
  //抽象方法 
  public abstract void method2();
} 

具體的產(chǎn)品類可以有多個,都繼承于抽象產(chǎn)品類,源代碼如下:

//具體產(chǎn)品類 
public class ConcreteProduct1 extends Product {
  public void method2() { 
    //業(yè)務邏輯處理 
  } 
} 
public class ConcreteProduct2 extends Product {
  public void method2() { 
    //業(yè)務邏輯處理 
  } 
}

抽象工廠類負責定義產(chǎn)品對象的產(chǎn)生,源代碼如下:

//抽象工廠類 
public abstract class Creator { 
  /** 
  *創(chuàng)建一個產(chǎn)品類,其輸入?yún)?shù)類型可以自行設(shè)置,通常為String,Enum, Class,當然可以為空
  */ 
  public abstract <T extends Product> T createProduct(Class<T> cls);
} 

具體如何產(chǎn)生一個產(chǎn)品的對象,是有具體的工廠類實現(xiàn)的,源代碼如下:

//具體工廠類 
public class ConcteteCreator extends Creator { 
  public <T extends Product> T createProduct(Class<T> cls) { 
    Product product = null; 
    try { 
      product = (Product)Class.forName(cls.getName()).newInstance();
    } catch (Exception e) { 
      //異常處理 
    } 
    return (T)product; 
  } 
} 

場景類的調(diào)用方法如下代碼:

//場景類 
public class Client { 
  public static void main(String[] args) { 
    Creator creator = new ConcreteCreator(); 
    Product product = creator.createProduct(ConcreteProduct1.class);
    /** 
    *繼續(xù)業(yè)務處理 
    */ 
  } 
}

改通用代碼是一個比較實用、易擴展的框架,讀者可以根據(jù)實際項目需要進行擴展。

希望本文所述對大家Java程序設(shè)計有所幫助。

相關(guān)文章

最新評論