簡單工廠模式不屬于23種標準設計模式
簡單工廠模式是工廠方法模式的一個特殊的實現
簡單工廠就是由一個工廠類根據傳入的參數決定創建出哪一種產品類的實例
二、實現產品接口或者抽象類
package factory;/* * 產品接口 */public interface PRoduct { //生產工藝 public void craftwork(); //產品類型 public void type();}
實現的子類
package factory;/* * 鮮奶類 */public class Creamery implements Product { @Override public void craftwork() { System.out.println("牛奶+除菌=鮮奶!"); } @Override public void type() { System.out.println("生產鮮奶!!"); }}package factory;/* * 酸奶類 */public class Yoghourt implements Product { @Override public void craftwork() { System.out.println("牛奶+酵母菌+糧=酸奶!"); } @Override public void type() { System.out.println("生產了酸奶!"); }}異常
package factory;/* * 自定義異常 */public class BadException extends Exception { /** * */ private static final long serialVersionUID = 1L; public BadException(String message) { super(message); } }靜態工廠
package factory;/* * 靜態工廠 */public class StaticFactory { //根據傳入的參數返回不同的產品 public static Product factory(String str) throws BadException{ if(str.equalsIgnoreCase("Creamery")){ System.out.println("========生產鮮奶!========"); return new Creamery(); }else if(str.equalsIgnoreCase("Yoghourt")){ System.out.println("=======生產酸奶!=========="); return new Yoghourt(); }else{ throw new BadException("沒有這個產品!"); } }}測試類
package factory;/* * 測試類 */public class Test { public static void main(String[] args) { try { //通過工廠創建產品也可以使用輸入來傳值 Product cProduct=StaticFactory.factory("Creamery"); cProduct.craftwork(); cProduct.type(); //通過工廠創建產品也可以使用輸入來傳值 Product yProduct=StaticFactory.factory("Yoghourt"); yProduct.craftwork(); yProduct.type(); } catch (BadException e) { e.printStackTrace(); } }}結果:
========生產鮮奶!========牛奶+除菌=鮮奶!生產鮮奶!!=======生產酸奶!==========牛奶+酵母菌+糧=酸奶!生產了酸奶!三、工廠方法模式--多態性工廠模式
工廠類不再負責所有產品的創建,僅負責給出具體工廠子類必須實現的接口

package factorymethod;/* * 產品接口 */public interface Product { //生產工藝 public void craftwork(); //產品類型 public void type();}package factorymethod;/* * 鮮奶類 */public class Creamery implements Product { @Override public void craftwork() { System.out.println("牛奶+除菌=鮮奶!"); } @Override public void type() { System.out.println("生產鮮奶!!"); }}package factorymethod;/* * 酸奶類 */public class Yoghourt implements Product { @Override public void craftwork() { System.out.println("牛奶+酵母菌+糧=酸奶!"); } @Override public void type() { System.out.println("生產了酸奶!"); }}package factorymethod;import factory.Product;/* * 產品工廠 */public interface ProductFactory { //返回類型為產品接口 public Product factory();}package factorymethod;import factory.Creamery;import factory.Product;/* * 鮮奶工廠 */public class CreameryFactory implements ProductFactory { @Override public Product factory() { System.out.println("========生產鮮奶!========"); return new Creamery(); }}package factorymethod;import factory.Product;import factory.Yoghourt;/* * 酸奶工廠 */public class YoghourtFactory implements ProductFactory { @Override public Product factory() { System.out.println("=======生產酸奶!=========="); return new Yoghourt(); }}測試類
package factorymethod;/* * 工廠方法測試類 */public class Test { public static void main(String[] args) { //創建產品工廠對象并實例化為鮮奶工廠 ProductFactory cf=new CreameryFactory(); cf.factory().craftwork(); cf.factory().type(); //創建產品工廠對象并實例化為酸奶工廠 ProductFactory yf=new CreameryFactory(); //調用產品工廠的方法 yf.factory().craftwork(); yf.factory().type(); }}結果:
========生產鮮奶!========牛奶+除菌=鮮奶!========生產鮮奶!========生產鮮奶!!========生產鮮奶!========牛奶+除菌=鮮奶!========生產鮮奶!========生產鮮奶!!
如果要添加新新產品,只需要添加新的產品接口子類和產品工廠子類就可以了
完全支持開閉原則
新聞熱點
疑難解答