java接口工廠模式理解


  作為實際java開發經驗還不到一年的我,第一次寫博客,誠惶誠恐,怕把自己的謬誤公之於眾,誤人子弟,不過轉念一想,若是能有同行加以指點評判,將他們的真知灼見描述出來,那這篇文章就算拋轉引玉了。

   最近在閱讀《Java編程思想》有關接口的最后一小節中,作者提出了工廠設計模式,用來解決---生成實現某個接口的對象。說實話,對設計模式近乎一無所知的我,看到這里會想,這也太簡單了,腦子里不假思索的會寫出這樣一個例子:

 1 //
 2 interface Air{
 3   void show();
 4 }
 5 
 6 //悟空
 7 class WuKong implements Air{
 8   @Override
 9   public void show() {
10       System.out.println("悟空:龜派氣功");
11   }
12 }
13 
14 public class Test {
15   public static void main(String[] args) {
16       Air wk = new WuKong();
17       wk.show();
18   }
19 }

 

  聯想到書中提到的工廠設計模式,我這時就會想:這個模式的設計目的是什么?在什么情況下用它能發揮模式的作用?怎么寫出這個模式,而不純粹靠背的?

  1.書中的解釋看的不太明白,后台在網上找了一個通俗易懂的解釋:工廠設計模式是為了將對象的創建與使用進行分離。上面例子中創建了悟空對象,隨機就調用了show() ,而這種模式就是在悟空對象創建和使用這兩個環節中做文章。思路弄明白了,超級簡單。本來流程是:生成對象a-->a.m();演變成生成工廠類b,b中的方法n(),可以生成對象a,然后a.m()。看看代碼:

interface Air{
   void show();
 }
 //悟空
class WuKong implements Air{
   @Override
   public void show() {
       System.out.println("悟空:龜派氣功");
   }
 }
//悟空工廠類,目的很單純,就為了創建悟空對象 
class WuKongFactory{
     public Air getAir(){
         return new WuKong();
     }
 }
public class Test {
   public static void main(String[] args) {
//     Air wk = new WuKong();
//     wk.show();
       /**
        * 隨着引入工廠類,調用show方法也做了些調整,先創建悟空工廠類對象factory,
        * 重點來了,new WuKong()的操作被封裝到了getAir()里面。
        * 試想這樣一種情景:main()方法我們不改動它,可以自己新增修改其他類,
        * 在這種情況下:我們可以修改getAir()方法,來return任何包含有show()方法的對象(也就是實現Air接口),
        * 從而讓下面的代碼輸出不同的結果。很顯然,注釋的那兩行代碼玩不出這種花樣。
        */
       WuKongFactory factory = new WuKongFactory();
       factory.getAir().show();
       
   }
 }

 

  來,我們來驗證一下,在main()方法不變的情況下,我們新增一個實現Air接口的八戒類,看看效果:

//悟空工廠類,目的很單純,就為了創建悟空對象 
class WuKongFactory{
     public Air getAir(){
         //注意:這里不再是new WuKong()
         return new BaJie();
     }
 }
//八戒
class BaJie implements Air{
    @Override
    public void show() {
        System.out.println("八戒:豬豬乾坤屁");
    }
}

 

  這時factory.getAir()創建的是八戒對象,於是產生了不同的結果。還有一點優化:針對WuKongFactory這個getAir()方法,其實是這個模式的核心方法,它就是為了創建你想要解耦的那個對象的實例,可以如書中的例子一樣,把它抽離出來,封裝成一個接口,想創建悟空或八戒對象時,就實現這個接口,重寫方法創建你想要的對象。

interface Factory{
    Air getAir();
}
class WuKongFactory implements Factory{
    @Override
    public Air getAir() {
        return new WuKong();
    }
}
class BaJieFactory implements Factory{
    public Air getAir() {
        return new BaJie();
    }
}

  

  走筆至此,工廠方法設計模式的理解,我也就只能講這么多,由於開發經驗太單薄,而且我也處於正在學習Java的階段,所以我沒能舉出在實際項目中運用這種模式的鮮活案例(有用到這種模式的朋友們希望能分享一下)。不過,這種模式的理解之后,還是比較簡單的,繞的彎也就那么一道而已。同時,我在繼續看這本書時,以后也會多寫博客,整理一下心得,與大家共享。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM