1. 程式人生 > >JAVA簡單工廠模式

JAVA簡單工廠模式

1.工廠模式概念

工廠模式是常見的建立模式之一。 定義工廠模式是我們最常用的例項化物件模式了,是用工廠方法代替new操作的一種模式; 核心         (1)例項化物件,用工廠方法代替new操作。         (2)將選擇實現類,建立物件統一管理和控制,從而將呼叫者跟我們的實現類解耦。 特點實現了建立者和呼叫者的分離。 分類         (1)簡單工廠模式(Simple Factory Pattern):用來生產同一等級結構中的任意產品。(對於增加新的產品,需要修改已有的程式碼         (2)工廠方法模式(Factory Method) :用於生產同一等級結構中的固定產品。(
支援增加任意產品         (3)抽像工廠模式(Abstract Factory) 用來生產不同產品族的全部產品。(對於新增加的產品,無能為力,支援增加產品族 PS:(感覺是不是有點糊塗,一臉懵逼,沒關係以後總計到再回來看吧!)

2.簡單工廠模式(Simple Factory Pattern)

又叫靜態工廠方法模式(Static FactoryMethod Pattern)它由三種角色組成(關係見下面的類圖):
     1、工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。

     2、抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。在java中由介面或者抽象類來實現。

    3、具體產品角色:工廠類所建立的物件就是此角色的例項。在java中由一個具體類實現。

      簡單工廠模式比較簡單,這裡就寫一個例項吧!對比非工廠模式與簡單工廠模式。奧迪(audi)和比亞迪(byd)車的跑法。哈哈,不要太認真,這裡只是用來舉例而已。

3.UML圖

非工廠模式:
簡單工廠模式:

4.非工廠模式與簡單工廠模式具體比較

        (1)抽象產品

    //抽象產品角色  
    public interface Car {  
          public void run();                                                                                                                                      //更多具體邏輯.......  
    }  

        (2)具體產品

         奧迪產品:

    //具體產品奧迪  
    public class AuDi implements Car{  
        @Override  
        public void run() {  
            System.out.println("奧迪跑起來了");  
        }                                                                                                                                                           //更多具體邏輯......  
    }  

        比亞迪產品:

   //具體產品比亞迪                                                                                                                                           public class BYD implements Car{  
    @Override  
    public void run() {  
    System.out.println("比亞迪跑起來了");                                                                                                                      }
   }                                                        

非工廠模式測試:

    public class Client { //測試客戶端  
          //建立者和呼叫者沒有分離  
          public static void main(String[] args) {  
            Car auDi=new AuDi();//在這裡建立奧迪  
            Car byD=new BYD();//在這裡建立比亞迪                                                                                                                      auDi.run();  
            byD.run();                                                                                                                                               //更多具體邏輯.....  
        }  
    }  

簡單工廠模式測試:在上面抽象產品角色和具體產品角色的前提下增加,工廠類角色

      (3)工廠類

    public class CarFactory{//建立者  
           //在這創造奧迪  
         public static Car CreateAoDi(){  
             return new AuDi();//返回具體的產品角色給ClientSimpleFactory  
         }  
          //在這比創造亞迪  
         public static Car CreateBYD(){  
             return new BYD();//返回具體的產品角色給ClientSimpleFactory  
         }  
    }  
                  測試:
    public class ClientSimpleFactory {//測試客戶端  
        //呼叫者  
      public static void main(String[] args) {  
            Car aoDi= CarFactory.CreateAoDi();  
            Car byD=CarFactory.CreateBYD();  
            //車跑  
            aoDi.run();  
            byD.run();   
          //更多具體邏輯......  
       }  
     }  

5.小結

PS:簡單工廠模式分離產品的建立者和呼叫者,有利於軟體系統結構的優化;但是由於一切邏輯都集中在一個工廠類中,導致了沒有很高的內聚性,同時也違背了“開放封閉原則(OCP)”。另外,簡單工廠模式的方法一般都是靜態的,而靜態工廠方法是無法讓子類繼承的,因此,簡單工廠模式無法形成基於基類的繼承樹結構。

開放封閉原則(OCP):軟體設計本身所追求的目標就是封裝變化、降低耦合,而開放封閉原則正是對這一目標的最直接體現。軟體實體應該是可擴充套件,而不可修改的。也就是說,對擴充套件是開放的,而對修改是封閉的。

總結不好,希望吐槽!