工廠設計模式-三種實現方式

工廠設計模式說明

一、簡單工廠模式 Simple Factory

簡單工廠模式沒有被歸類到常見23種設計模式中,此處主要是和工廠方法、抽象工廠對比,方便理解。
簡單工廠模式:把對象的創建放到一個工廠類中,通過參數來創建不同的對象。

1.1案例代碼

角色組成

  • 抽象產品:定義了抽象產品具有的基本操作
  • 產品實現類:實現抽象產品類對定義的抽象方法
  • 生產工廠:不同的參數生成具體的產品對象

/**
 * 抽象產品:  配置接口
 */
interface OSSConfig {
    /**
     * 初始化OSS配置
     */
    void init();
}

/**
 * 具體產品:  阿里雲OSS配置
 */
class AlibabaOSSConfig implements OSSConfig {

    @Override
    public void init() {
        System.out.println("初始化--阿里雲--OSS配置");
    }
}

/**
 * 具體產品:  騰訊雲OSS配置
 */
class TencentOSSConfig implements OSSConfig {

    @Override
    public void init() {
        System.out.println("初始化--騰訊雲--OSS配置");
    }
}

/**
 * 簡單工廠類
 */
public class SimpleFactory {
    /**
     * 生產工廠
     */
    public static OSSConfig createOSSConfig(String name) {
        OSSConfig config = null;
        switch (name) {
            case "alibaba":
                config = new AlibabaOSSConfig();
                break;
            case "tencent":
                config = new TencentOSSConfig();
                break;
            default:
                break;
        }
        return config;
    }

    public static void main(String[] args) {
        OSSConfig alibabaConifg = SimpleFactory.createOSSConfig("alibaba");
        alibabaConifg.init();

        OSSConfig tencentConfig = SimpleFactory.createOSSConfig("tencent");
        tencentConfig.init();
    }
}

在這裏插入圖片描述

二、工廠方法模式 Factory Method

工廠方法模式: 每種產品由一種工廠來創建,一個工廠處理一個對象。

  • 一個抽象產品類,可以派生出多個具體產品類。
  • 一個抽象工廠類,可以派生出多個具體工廠類。
  • 每個具體工廠類只能創建一個具體產品類的實例。

2.1案例代碼

角色組成

  • 抽象工廠: 定義工廠類所具有的基本的操作
  • 具體工廠:該類必須繼承抽象工廠,實現抽象工廠定義的方法,返回一個對象
  • 抽象產品:定義了抽象產品具有的基本操作
  • 產品實現類:實現抽象產品類對定義的抽象方法,和具體工廠一一對應
/**
 * 抽象產品: 配置接口
 */
interface OSSConfig {
    /**
     * 初始化OSS配置
     */
    void init();
}

/**
 * 具體產品: 阿里雲OSS配置
 */
class AlibabaOSSConfig implements OSSConfig {

    @Override
    public void init() {
        System.out.println("初始化--阿里雲--OSS配置");
    }
}

/**
 * 具體產品: 騰訊雲OSS配置
 */
class TencentOSSConfig implements OSSConfig {

    @Override
    public void init() {
        System.out.println("初始化--騰訊雲--OSS配置");
    }
}


/**
 * 抽象工廠
 */
interface Factory {
    OSSConfig createOSSConfig();
}

/**
 * 具體工廠: 騰訊雲工廠
 */
class TencentOSSFactory implements Factory {

    @Override
    public OSSConfig createOSSConfig() {
        return new TencentOSSConfig();
    }
}

/**
 * 具體工廠: 騰訊雲工廠
 */
class AlibabaOSSFactory implements Factory {

    @Override
    public OSSConfig createOSSConfig() {
        return new AlibabaOSSConfig();
    }
}

/**
 * 工廠設計模擬類
 */
public class FactoryMethod {

    public static void main(String[] args) {
        AlibabaOSSFactory alibabaOSSFactory = new AlibabaOSSFactory();
        OSSConfig alibabaConifg = alibabaOSSFactory.createOSSConfig();
        alibabaConifg.init();

        TencentOSSFactory tencentOSSFactory = new TencentOSSFactory();
        OSSConfig tencentConfig = tencentOSSFactory.createOSSConfig();
        tencentConfig.init();
    }
}

在這裏插入圖片描述

三、抽象工廠模式 Abstract Factory

抽象工廠模式:工廠方法模式的進一步延伸

  • 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
  • 一個抽象工廠類,可以派生出多個具體工廠類。
  • 每個具體工廠類可以創建多個具體產品類的實例。

3.1案例代碼

角色組成

  • 抽象工廠: 定義工廠類所具有的基本的操作
  • 具體工廠:具體工廠實現了抽象工廠,每個工廠方法返回多個具體對象
  • 抽象類接口:定義了產品具有的基本操作,提供一組所有類都具有的業務方法
  • 抽象類:用於實現抽象接口所定義的業務方法,只做抽象接口,具體由產品實現類處理
  • 產品實現類:實現抽象產品類對定義的抽象方法,和具體工廠一對多
/**
 * 抽象產品: 配置接口
 */
interface OSSConfig {
    /**
     * 初始化OSS配置
     */
    void init();
}

/**
 * 具體產品: 阿里雲OSS配置
 */
abstract class AlibabaOSSConfig implements OSSConfig {
    public abstract void init();
}

/**
 * 具體產品: 阿里雲OSS配置Test環境
 */
class AlibabaTstOSSConfig implements OSSConfig {
    @Override
    public void init() {
        System.out.println("初始化--阿里雲--test環境--OSS配置");
    }
}

/**
 * 具體產品: 阿里雲OSS配置生產環境
 */
class AlibabaPreOSSConfig implements OSSConfig {
    @Override
    public void init() {
        System.out.println("初始化--阿里雲--Pre環境--OSS配置");
    }
}

/**
 * 具體產品: 騰訊雲OSS配置
 */
class TencentOSSConfig implements OSSConfig {

    @Override
    public void init() {
        System.out.println("初始化--騰訊雲--OSS配置");
    }
}

/**
 * 抽象工廠
 */
interface Factory {
    /**
     * 獲取測試環境配置
     */
    OSSConfig createOSSTestConfig();

    /**
     * 獲取生成環境配置
     */
    OSSConfig createOSSPreConfig();
}

/**
 * 具體工廠: 騰訊雲工廠
 */
class TencentOSSFactory implements Factory {

    @Override
    public OSSConfig createOSSTestConfig() {
        return null;
    }

    @Override
    public OSSConfig createOSSPreConfig() {
        return new TencentOSSConfig();
    }
}

/**
 * 具體工廠: 騰訊雲工廠
 */
class AlibabaOSSFactory implements Factory {

    @Override
    public OSSConfig createOSSTestConfig() {
        return new AlibabaTstOSSConfig();
    }

    @Override
    public OSSConfig createOSSPreConfig() {
        return new AlibabaPreOSSConfig();
    }
}

/**
 * 工廠設計模擬類
 */
public class AbstractFactory {

    public static void main(String[] args) {
        AlibabaOSSFactory alibabaOSSFactory = new AlibabaOSSFactory();
        OSSConfig alibabaConifg = alibabaOSSFactory.createOSSPreConfig();
        alibabaConifg.init();
        OSSConfig alibabaTestConifg = alibabaOSSFactory.createOSSTestConfig();
        alibabaTestConifg.init();

        TencentOSSFactory tencentOSSFactory = new TencentOSSFactory();
        OSSConfig tencentConifg = tencentOSSFactory.createOSSPreConfig();
        tencentConifg.init();

    }
}

在這裏插入圖片描述

四、工廠模式和抽象工廠模式對比

區別:
工廠方法模式:具體工廠類只能創建一個具體產品類的實例
抽象工廠模式:具體工廠類可以創建多個具體產品類的實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章