国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

簡單工廠模式--工廠方法模式(簡介)

2019-11-14 23:23:07
字體:
來源:轉載
供稿:網友
簡單工廠模式--工廠方法模式(簡介)一、簡單工廠模式(靜態工廠)

簡單工廠模式不屬于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();    }}

結果:

========生產鮮奶!========牛奶+除菌=鮮奶!========生產鮮奶!========生產鮮奶!!========生產鮮奶!========牛奶+除菌=鮮奶!========生產鮮奶!========生產鮮奶!!

如果要添加新新產品,只需要添加新的產品接口子類和產品工廠子類就可以了

完全支持開閉原則


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岚皋县| 余江县| 竹山县| 大方县| 六安市| 环江| 南皮县| 长春市| 黄平县| 邵阳市| 清河县| 永川市| 雷波县| 南安市| 上思县| 龙里县| 阿巴嘎旗| 开封市| 宝兴县| 收藏| 香河县| 文昌市| 云霄县| 桃园县| 桑植县| 南京市| 三都| 清镇市| 兴仁县| 荣昌县| 曲松县| 灌南县| 曲阜市| 崇州市| 高唐县| 逊克县| 紫阳县| 镇宁| 咸宁市| 峨山| 安图县|