工廠模式簡介。工廠模式專門負責將大量有共同介面的類實例化工廠模式可以動態決定將哪一個類實例化,不必事先知道每次要實例化哪一個類。工廠模式有三種形態:1、簡單工廠模式Simple Factory,又稱靜態工廠方法模式2、工廠方法模式Factory Method,又稱多態性工廠模式3、抽象工廠模式Abs...
-
工廠模式簡介。
工廠模式專門負責將大量有共同介面的類實例化
工廠模式可以動態決定將哪一個類實例化,不必事先知道每次要實例化哪一個類。
工廠模式有三種形態:
1、簡單工廠模式Simple Factory,又稱靜態工廠方法模式
2、工廠方法模式Factory Method,又稱多態性工廠模式
3、抽象工廠模式Abstract Factory,又稱工具箱模式
2、什麼是簡單工廠模式
簡單工廠模式是類的創建模式。是由一個工廠對象決定創建出哪一種產品類的實例,是不同的工廠方法模式的一個特殊實現。由一個工廠對象決定創建出哪一種產品類的實例,負責將大量有共同介面的類實例化。
3、使用實例
一個農場公司,專門向市場銷售各類水果。系統中需要描述下列水果:
1蘋果Apple
2葡萄Grape
3草莓Strawberry
水果與其他的植物不同,為與農場的其他植物區分開,可建立一個各種水果都適用的水果介面,該介面規定出水果類均需具備的方法:種植plant()、生長grow()以及收穫harvest()。
類圖如下:
具體實現類如下:
Fruit類:
/** * @FileName Fruit.java * @Package com.ali.pattern.factory.simplefactory * @Description TODO[what the file to do] * @Author ali blog:http://www.cnblogs.com/accipiter * @Date 2016年1月19日下午8:15:49 * @Version V1.0.1 */ package com.ali.pattern.factory.simplefactory; /** * @ClassName Fruit * @Description 一個各種水果都適用的水果介面,該介面規定出水果類均需具備的方法 * @Date 下午8:15:49 */ public interface Fruit { public void plant(); public void grow(); public void harverst(); }
FruitGardener類:
/** * @FileName FruitGardener.java * @Package com.ali.pattern.factory.simplefactory * @Description TODO[what the file to do] * @Author ali blog:http://www.cnblogs.com/accipiter * @Date 2016年1月19日下午8:32:34 * @Version V1.0.1 */ package com.ali.pattern.factory.simplefactory; import com.ali.pattern.factory.simplefactory.impl.Apple; import com.ali.pattern.factory.simplefactory.impl.Grape; import com.ali.pattern.factory.simplefactory.impl.Strawberry; /** * @ClassName FruitGardener * @Description TODO * @Date 下午8:32:34 */ public class FruitGardener { public static Fruit factory(String which){ if(which.equals("apple")){ return new Apple(); }else if(which.equals("grape")){ return new Grape(); }else if(which.equals("strawberry")){ return new Strawberry(); }else{ return null; } } }
Apple類:
/** * @FileName Apple.java * @Package com.ali.pattern.factory.simplefactory.impl * @Description TODO[what the file to do] * @Author ali blog:http://www.cnblogs.com/accipiter * @Date 2016年1月19日下午8:25:14 * @Version V1.0.1 */ package com.ali.pattern.factory.simplefactory.impl; import com.ali.pattern.factory.simplefactory.Fruit; /** * @ClassName Apple * @Description TODO * @Date 下午8:25:14 */ public class Apple implements Fruit { @Override public void plant() { System.out.println("Plant apple."); } @Override public void grow() { System.out.println("grow apple."); } @Override public void harverst() { System.out.println("harverst apple."); } }
4、簡單工廠模式的特點:
在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
將對象的創建和對象本身業務處理分離可以降低系統的耦合度,使得兩者修改起來都相對容易。
在調用工廠類的工廠方法時,由於工廠方法是靜態方法,使用起來很方便,可通過類名直接調用,而且只需要傳入一個簡單的參數即可,在實際開發中,還可以在調用時將所傳入的參數保存在XML等格式的配臵文件中,修改參數時無須修改任何Java源代碼。
簡單工廠模式最大的問題在於工廠類的職責相對過重,增加新的產品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的。
簡單工廠模式的要點在於:當你需要什麼,只需要傳入一個正確的參數,就可以獲取你所需要的對象,而無須知道其創建細節。
優點:
1、模式的核心是工廠類,該類中含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅負責"消費"產品。
2、簡單工廠模式實現了對責任的分割。
缺點:
- 由於工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。
3、系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴展和維護。
4、簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
========博客園管理員似乎不太喜歡設計模式的文章,也許是太多了吧,不過都的學一遍====================================