91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java簡單工廠,工廠方法,抽象工廠模式怎么實現

發布時間:2022-02-23 13:48:22 來源:億速云 閱讀:199 作者:iii 欄目:開發技術

這篇文章主要講解了“Java簡單工廠,工廠方法,抽象工廠模式怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java簡單工廠,工廠方法,抽象工廠模式怎么實現”吧!

    1、簡單工廠模式

    1.定義

    簡單工廠模式(Simple Factory Pattern)是指由一個工廠對象決定創建出哪一種產品類的實例。
    屬于創建型模式,但它不屬于GOF23種設計模式。

    2.代碼案例

    假設以罐頭產品的制造為案例

    第一步:定義罐頭的頂層接口類ICanned

    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 罐頭頂層接口
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 17:52
     */
    public interface ICanned {
    
        /**
         * 展示罐頭名稱
         * <p/>
         *
         * @return void
         * @author HuangZhiGao
         * @date 2022/2/17/017 17:54
         */
        void showCannedName();
    
    }

    第二步:分別編寫兩個具體的實現類FruitCannedBeefCanned

    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 水果罐頭
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 17:56
     */
    public class FruitCanned implements ICanned {
    
        @Override
        public void showCannedName() {
            System.out.println("名稱:水果罐頭");
        }
    
    }
    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 牛肉罐頭
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 17:57
     */
    public class BeefCanned implements ICanned {
    
        @Override
        public void showCannedName() {
            System.out.println("名稱:牛肉罐頭");
        }
    
    }

    第三步:編寫工廠類

    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 罐頭工廠類
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 18:16
     */
    public class CannedFactory {
    
        /**
         * 創建罐頭的方法
         * <p/>
         *
         * @param clazz
         * @return com.hzg.study.design.pattern.factory.common.ICanned
         * @author HuangZhiGao
         * @date 2022/2/17/017 18:18
         */
        public ICanned createCanned(Class<? extends ICanned> clazz) {
            if (null != clazz) {
                try {
                    return clazz.newInstance();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    
    }

    第四步:main方法測試、查看類圖

    import com.hzg.study.design.pattern.factory.common.BeefCanned;
    import com.hzg.study.design.pattern.factory.common.FruitCanned;
    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 測試類
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 18:22
     */
    public class SimpleFactoryTest {
        public static void main(String[] args) {
            CannedFactory cannedFactory = new CannedFactory();
            ICanned fruitCanned = cannedFactory.createCanned(FruitCanned.class);
            fruitCanned.showCannedName();
            System.out.println("----------------------------------------");
            ICanned beefCanned = cannedFactory.createCanned(BeefCanned.class);
            beefCanned.showCannedName();
        }
    }

    運行結果:

    名稱:水果罐頭
    ----------------------------------------
    名稱:牛肉罐頭

    簡單工廠模式類圖:

    Java簡單工廠,工廠方法,抽象工廠模式怎么實現

    3.適用場景

    工廠類負責創建的對象較少,不需要關心創建對象的邏輯

    4.優缺點

    優點:

    簡化了客戶端創建對象的過程

    缺點:

    1.工廠類職責相對較重,在一定程度上可能違背開閉原則(增加新的產品可能需要修改工廠類邏輯)
    2.不易于擴展過于復雜的產品結構

    2、工廠方法模式

    1.定義

    工廠方法模式(Factory Method Pattern)是指定義一個創建對象的接口,但讓實現這個接口的類來決定實例化哪個類,工廠方法讓類的實例化推遲到子類中進行。
    屬于創建型設計模式。

    2.代碼案例

    需要使用到簡單工廠模式的ICannedFruitCannedBeefCanned

    第一步:定義罐頭工廠頂層接口類ICannedFactory

    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.factorymethod
     * @Description: 罐頭工廠頂層接口
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:03
     */
    public interface ICannedFactory {
    
        /**
         * 創建罐頭方法
         * <p/>
         *
         * @return void
         * @author HuangZhiGao
         * @date 2022/2/18/018 10:04
         */
        ICanned doCreateCanned();
    
    }

    第二步:分別編寫兩個具體的工廠實現類FruitCannedFactoryBeefCannedFactory

    import com.hzg.study.design.pattern.factory.common.FruitCanned;
    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.factorymethod
     * @Description: 水果罐頭工廠類
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:05
     */
    public class FruitCannedFactory implements ICannedFactory {
    
        @Override
        public ICanned doCreateCanned() {
            return new FruitCanned();
        }
    
    }
    import com.hzg.study.design.pattern.factory.common.BeefCanned;
    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.factorymethod
     * @Description: 牛肉罐頭工廠類
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:08
     */
    public class BeefCannedFactory implements ICannedFactory {
    
        @Override
        public ICanned doCreateCanned() {
            return new BeefCanned();
        }
    
    }

    第三步:main方法測試、查看類圖

    import com.hzg.study.design.pattern.factory.common.BeefCanned;
    import com.hzg.study.design.pattern.factory.common.FruitCanned;
    import com.hzg.study.design.pattern.factory.common.ICanned;
    
    /**
     * @Package: com.hzg.study.design.pattern.factory.simplefactory
     * @Description: 測試類
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-17 18:22
     */
    public class SimpleFactoryTest {
        public static void main(String[] args) {
            CannedFactory cannedFactory = new CannedFactory();
            ICanned fruitCanned = cannedFactory.createCanned(FruitCanned.class);
            fruitCanned.showCannedName();
            System.out.println("----------------------------------------");
            ICanned beefCanned = cannedFactory.createCanned(BeefCanned.class);
            beefCanned.showCannedName();
        }
    }

    運行結果:

    名稱:水果罐頭
    ----------------------------------------
    名稱:牛肉罐頭

    工廠方法模式類圖:

    Java簡單工廠,工廠方法,抽象工廠模式怎么實現

    3.適用場景

    創建對象需要大量重復的代碼。
    客戶端(應用層)不依賴于產品類實例如何被創建、實現等細節。
    一個類通過其子類來指定創建哪個對象。

    4.優缺點

    優點:

    1.用戶只需關心所需產品對應的工廠,無須關心創建細節。
    2.加入新產品符合開閉原則,提高了系統的可擴展性。

    缺點:

    1.類的個數容易過多,增加了代碼結構的復雜度。
    2.增加了系統的抽象性和理解難度。

    3、抽象工廠模式

    1.定義

    抽象工廠模式(Abstract Factory Pattern)是指提供一個創建一系列相關或相互依賴對象的接口,無須指定他們具體的類。
    屬于創建型設計模式。

    抽象工廠模式有產品族和產品等級的概念,可以通俗的理解為

    產品族相當于不同品牌的產品合集,產品等級相當于不同品牌的同一種產品

    例如:水果罐頭的材料信息、標簽信息組成了一個產品族,牛肉罐頭的材料信息、標簽信息組成了一個產品族

    水果罐頭的材料信息、牛肉罐頭的材料信息組成一個產品等級,水果罐頭的標簽信息、牛肉罐頭的標簽信息組成一個產品等級

    2.代碼案例

    假設制造一個罐頭包含兩個部分(材料信息+標簽信息)

    第一步:分別定義罐頭材料信息接口IMaterialInfo和罐頭標簽信息接口ITagInfo

    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description: 罐頭材料信息接口
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:51
     */
    public interface IMaterialInfo {
    
        /**
         * 打印材料信息
         * <p/>
         *
         * @return void
         * @author HuangZhiGao
         * @date 2022/2/18/018 10:57
         */
        void printMaterialInfo();
    
    }
    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description: 罐頭標簽信息接口
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:48
     */
    public interface ITagInfo {
    
        /**
         * 打印標簽信息
         * <p/>
         *
         * @return void
         * @author HuangZhiGao
         * @date 2022/2/18/018 10:57
         */
        void printTagInfo();
    
    }

    第二步:定義罐頭的頂層工廠接口類ICannedFactory

    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description: 頂層工廠接口:一個罐頭包含兩個部分(材料信息+標簽信息)
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 10:47
     */
    public interface ICannedFactory {
    
        IMaterialInfo createMaterialInfo();
    
        ITagInfo createTagInfo();
    
    }

    第三步:分別編寫具體實現類FruitMaterialInfoFruitTagInfoBeefMaterialInfoBeefTagInfo

    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:05
     */
    public class FruitMaterialInfo implements IMaterialInfo {
    
        @Override
        public void printMaterialInfo() {
            System.out.println("材料:水果");
        }
    
    }
    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:05
     */
    public class FruitTagInfo implements ITagInfo {
    
        @Override
        public void printTagInfo() {
            System.out.println("標簽:2022升級版水果罐頭");
        }
    
    }
    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:05
     */
    public class BeefMaterialInfo implements IMaterialInfo {
    
        @Override
        public void printMaterialInfo() {
            System.out.println("材料:牛肉");
        }
    
    }
    /** * @Package: com.hzg.study.design.pattern.factory.abstractfactory * @Description: * @Author: HuangZhiGao * @CreateDate: 2022-02-18 11:06 */public class BeefTagInfo implements ITagInfo {    @Override    public void printTagInfo() {        System.out.println("標簽:2022升級版牛肉罐頭");    }}/**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:06
     */
    public class BeefTagInfo implements ITagInfo {
    
        @Override
        public void printTagInfo() {
            System.out.println("標簽:2022升級版牛肉罐頭");
        }
    
    }

    第四步:分別編寫工廠具體實現類FruitCannedFactoryBeefCannedFactory

    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:04
     */
    public class FruitCannedFactory implements ICannedFactory {
    
        @Override
        public IMaterialInfo createMaterialInfo() {
            return new FruitMaterialInfo();
        }
    
        @Override
        public ITagInfo createTagInfo() {
            return new FruitTagInfo();
        }
    
    }
    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:04
     */
    public class BeefCannedFactory implements ICannedFactory {
    
        @Override
        public IMaterialInfo createMaterialInfo() {
            return new BeefMaterialInfo();
        }
    
        @Override
        public ITagInfo createTagInfo() {
            return new BeefTagInfo();
        }
    
    }

    第五步:main方法測試、查看類圖

    /**
     * @Package: com.hzg.study.design.pattern.factory.abstractfactory
     * @Description:
     * @Author: HuangZhiGao
     * @CreateDate: 2022-02-18 11:12
     */
    public class AbstractFactoryTest {
    
        public static void main(String[] args) {
            ICannedFactory beefCannedFactory = new BeefCannedFactory();
            beefCannedFactory.createMaterialInfo().printMaterialInfo();
            beefCannedFactory.createTagInfo().printTagInfo();
            System.out.println("----------------------------------------");
            ICannedFactory fruitCannedFactory = new FruitCannedFactory();
            fruitCannedFactory.createMaterialInfo().printMaterialInfo();
            fruitCannedFactory.createTagInfo().printTagInfo();
        }
    
    }

    運行結果:

    材料:牛肉
    標簽:2022升級版牛肉罐頭
    ----------------------------------------
    材料:水果
    標簽:2022升級版水果罐頭

    抽象工廠模式類圖:

    Java簡單工廠,工廠方法,抽象工廠模式怎么實現

    3.適用場景

    客戶端(應用層)不依賴于產品類實例如何被創建、實現等細節。
    強調一系列相關的產品對象(屬于同一產品族)一起使用創建對象需要大量重復的代碼。
    提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴于具體實現。

    4.優缺點

    優點:

    1.具體產品在應用層代碼隔離,無須關心創建細節。
    2.將一個系列的產品族統一到一起創建。

    缺點:

    1.規定了所有可能被創建的產品集合,產品族中擴展新的產品困難,需要修改抽象工廠的接口。
    2.增加了系統的抽象性和理解難度。

    感謝各位的閱讀,以上就是“Java簡單工廠,工廠方法,抽象工廠模式怎么實現”的內容了,經過本文的學習后,相信大家對Java簡單工廠,工廠方法,抽象工廠模式怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    石棉县| 延寿县| 静宁县| 云林县| 德惠市| 浙江省| 涿州市| 邵武市| 田东县| 高陵县| 光山县| 高邮市| 云和县| 阳原县| 自贡市| 满洲里市| 喜德县| 开原市| 沾益县| 翼城县| 海晏县| 沧州市| 鄂托克旗| 东阿县| 梧州市| 阿勒泰市| 保定市| 西贡区| 汉中市| 东乡族自治县| 三原县| 宝丰县| 崇阳县| 江西省| 辽源市| 景东| 增城市| 孝昌县| 深水埗区| 大竹县| 石泉县|