1.建立產品的工廠類負責建立的對象比較少,所以不會形成工廠方法中的業務邏輯太複雜java
2.客戶端只知道傳入工廠的類的參數,對於方法內如何建立對象不關心git
Product:產品接口github
ProductA:具體產品Aweb
ProductB:具體產品B編程
ProductC:具體產品Csocket
ProductFactory:建立產品工廠測試
package com.sedion.mynawang.Chapter01_SimpleFactoryPattern; /** * 產品接口 * @auther mynawang * @create 2016-12-28 16:58 */ public interface Product { }
package com.sedion.mynawang.Chapter01_SimpleFactoryPattern; /** * 產品A * @auther mynawang * @create 2016-12-28 16:59 */ public class ProductA implements Product{ }
package com.sedion.mynawang.Chapter01_SimpleFactoryPattern; /** * 產品B * @auther mynawang * @create 2016-12-28 16:59 */ public class ProductB implements Product{ }
package com.sedion.mynawang.Chapter01_SimpleFactoryPattern; /** * 產品C * @auther mynawang * @create 2016-12-28 16:59 */ public class ProductC implements Product{ }
package com.sedion.mynawang.Chapter01_SimpleFactoryPattern; import java.util.logging.Logger; /** * 工廠類,用來生產產品(簡單工廠類||靜態工廠類) * @auther mynawang * @create 2016-12-28 17:04 */ public class ProductFactory { private static Logger logger = Logger.getLogger("ProductFactory_log"); public static Product creatProduct(String productType) { Product product = null; if ("proA".equals(productType)) { product = new ProductA(); logger.info("簡單工廠==》建立了ProductA"); } else if ("proB".equals(productType)) { product = new ProductB(); logger.info("簡單工廠==》建立了ProductB"); } else if ("proC".equals(productType)) { product = new ProductC(); logger.info("簡單工廠==》建立了ProductC"); } else { logger.info("簡單工廠==》沒有這樣的產品"); } return product; } }
package com.sedion.mynawang; import com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory; /** * 簡單工廠模式測試 * @auther mynawang * @create 2016-12-28 17:03 */ public class Chapter01_SimpleFactoryPattern_test { public static void main(String[] args) { ProductFactory.creatProduct("proA"); ProductFactory.creatProduct("proB"); ProductFactory.creatProduct("proC"); ProductFactory.creatProduct("proD"); } }
// 打印結果 Connected to the target VM, address: '127.0.0.1:52152', transport: 'socket' 十二月 28, 2016 5:27:11 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct 信息: 簡單工廠==》建立了ProductA 十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct 信息: 簡單工廠==》建立了ProductB 十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct 信息: 簡單工廠==》建立了ProductC Disconnected from the target VM, address: '127.0.0.1:52152', transport: 'socket' 十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct 信息: 簡單工廠==》沒有這樣的產品 Process finished with exit code 0
1.經過引入配置文件,能夠在不修改客戶端代碼的狀況下更換和新加具體的產品類,必定程度上提升了靈活性。加密
2.客戶端無需知道建立的具體產品類的類名,有助於對複雜類名減小記憶量。spa
3.對代碼有明顯的分工,工廠類負責製造產品類的實例,客戶端負責使用該類。code
1.全部類都集中在工廠類中利用邏輯判斷生成,因此該類會影響整個系統。
2.簡單工廠模式將會增長系統中類的個數,增長了系統的複雜度和理解難度。
3.拓展相對困難,一旦新加產品就必須修改工廠類的邏輯,在產品類型較多時會形成工廠類的代碼過於複雜。
4.工廠類因爲使用的是靜態工廠方法,致使工廠角色沒法造成基於繼承的等級結構。
1.JDK類庫中的java.text.DateFormat,用於格式化一個本地日期
public final static DateFormat getDateInstance(); public final static DateFormat getDateInstance(int style); public final static DateFormat getDateInstance(int style,Locale locale);
2.DESEncrypt.java中獲取加密的密鑰生成器等
KeyGenerator keyGen=KeyGenerator.getInstance("DESede");
本人20有餘,天資愚鈍,深信勤能補拙。酷愛編程,愛鑽研,廣交碼友,耕於三線,日以繼夜而使飛燕之身蛻變爲大腹便便。
有志之士點擊連接加入技術交流羣【專一的程序猿】282087535
文章若是對你有所幫助是個人榮幸,不妥之處但願指正,轉帖請註明本文出自鈺火的小棧(http://www.mynawang.com/),請尊重他人的辛勤勞動成果,謝謝!