国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式--工廠模式(Factory Pattern)

這篇具有很好參考價值的文章主要介紹了設(shè)計模式--工廠模式(Factory Pattern)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、 什么是工廠模式

工廠模式(Factory Pattern)是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的接口,但是將對象的實例化過程推遲到子類中。工廠模式允許通過調(diào)用一個共同的接口方法來創(chuàng)建不同類型的對象,而無需暴露對象的實例化邏輯。

工廠模式的主要目標是解耦對象的創(chuàng)建和使用,以及提供一種更靈活的方式來管理對象的實例化。通過使用工廠模式,可以輕松添加新類型的對象,而不會影響到已有的代碼。

工廠模式通常涉及以下幾個核心角色:

  1. 產(chǎn)品(Product):這是一個抽象類或接口,定義了所創(chuàng)建對象的通用接口。
  2. 具體產(chǎn)品(Concrete Product):這些是實現(xiàn)了產(chǎn)品接口的具體類,它們是工廠方法模式的創(chuàng)建目標。
  3. 工廠(Factory):這是一個抽象類或接口,定義了創(chuàng)建對象的接口方法。工廠類通常是一個創(chuàng)建具體產(chǎn)品對象的工廠方法。
  4. 具體工廠(Concrete Factory):這些是實現(xiàn)了工廠接口的具體類,它們負責實例化具體的產(chǎn)品對象。

工廠模式可以分為三種常見的變體:

  1. 簡單工廠模式(Simple Factory Pattern):通過一個共同的工廠類來創(chuàng)建對象,客戶端只需傳遞一個參數(shù)來指定所需的對象類型。雖然不是嚴格意義上的設(shè)計模式,但它是工廠模式的基礎(chǔ)。
  2. 工廠方法模式(Factory Method Pattern):定義一個工廠接口,具體的工廠子類負責實現(xiàn)工廠接口并創(chuàng)建對象。每個具體工廠對應(yīng)一個特定的產(chǎn)品。
  3. 抽象工廠模式(Abstract Factory Pattern):提供了一種創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定具體類。適用于創(chuàng)建一組相互關(guān)聯(lián)的產(chǎn)品。

二、簡單工廠模式的代碼樣例

簡單工廠模式(Simple Factory Pattern)雖然不是嚴格的設(shè)計模式,但它是工廠模式的一種基本形式,適用于創(chuàng)建單一類別的對象。在簡單工廠模式中,有一個工廠類負責根據(jù)客戶端的請求創(chuàng)建不同類型的對象。

以下是一個用C++實現(xiàn)簡單工廠模式的示例:

#include <iostream>

// 抽象產(chǎn)品類
class Product {
public:
    virtual void operation() = 0;
};

// 具體產(chǎn)品類A
class ConcreteProductA : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductA operation." << std::endl;
    }
};

// 具體產(chǎn)品類B
class ConcreteProductB : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductB operation." << std::endl;
    }
};

// 簡單工廠類
class SimpleFactory {
public:
    // 根據(jù)傳入的參數(shù)創(chuàng)建不同類型的產(chǎn)品對象
    static Product* createProduct(char type) {
        if (type == 'A') {
            return new ConcreteProductA();
        } else if (type == 'B') {
            return new ConcreteProductB();
        } else {
            return nullptr; // 可以拋出異?;蚱渌幚?/span>
        }
    }
};

int main() {
    // 客戶端通過工廠創(chuàng)建產(chǎn)品
    Product* productA = SimpleFactory::createProduct('A');
    Product* productB = SimpleFactory::createProduct('B');

    if (productA) {
        productA->operation();
        delete productA;
    }

    if (productB) {
        productB->operation();
        delete productB;
    }

    return 0;
}

在這個例子中,我們定義了一個抽象產(chǎn)品類 Product,然后有兩個具體的產(chǎn)品類 ConcreteProductA 和 ConcreteProductB。簡單工廠類 SimpleFactory 有一個靜態(tài)方法 createProduct,根據(jù)傳入的參數(shù)來創(chuàng)建不同類型的產(chǎn)品對象。

雖然簡單工廠模式簡化了對象的實例化,但它的弊端在于如果需要添加新類型的產(chǎn)品,就需要修改工廠類的代碼。因此,當需要支持更多產(chǎn)品類型時,更推薦使用工廠方法模式或抽象工廠模式。

三、工廠方法模式的代碼樣例

工廠方法模式(Factory Method Pattern)是一種創(chuàng)建型設(shè)計模式,它定義了一個用于創(chuàng)建對象的接口,但是將具體的對象實例化推遲到子類中。每個具體的工廠子類負責創(chuàng)建特定類型的對象。這種模式使得客戶端代碼與具體創(chuàng)建對象的代碼分離,實現(xiàn)了松耦合。

以下是一個用C++實現(xiàn)工廠方法模式的示例:

#include <iostream>

// 抽象產(chǎn)品類
class Product {
public:
    virtual void operation() = 0;
};

// 具體產(chǎn)品類A
class ConcreteProductA : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductA operation." << std::endl;
    }
};

// 具體產(chǎn)品類B
class ConcreteProductB : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductB operation." << std::endl;
    }
};

// 抽象工廠類
class Factory {
public:
    virtual Product* createProduct() = 0;
};

// 具體工廠類A
class ConcreteFactoryA : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductA();
    }
};

// 具體工廠類B
class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductB();
    }
};

int main() {
    // 客戶端通過具體工廠來創(chuàng)建產(chǎn)品
    Factory* factoryA = new ConcreteFactoryA();
    Product* productA = factoryA->createProduct();
    productA->operation();
    delete factoryA;
    delete productA;

    Factory* factoryB = new ConcreteFactoryB();
    Product* productB = factoryB->createProduct();
    productB->operation();
    delete factoryB;
    delete productB;

    return 0;
}

在這個例子中,我們定義了一個抽象產(chǎn)品類 Product,然后有兩個具體的產(chǎn)品類 ConcreteProductA 和 ConcreteProductB。抽象工廠類 Factory 定義了一個純虛函數(shù) createProduct,由具體的工廠子類來實現(xiàn)該方法并創(chuàng)建特定類型的產(chǎn)品對象。

客戶端使用具體的工廠類來創(chuàng)建產(chǎn)品,這樣客戶端代碼與具體的產(chǎn)品創(chuàng)建代碼分離,實現(xiàn)了解耦。工廠方法模式允許通過添加新的工廠子類來支持新的產(chǎn)品類型,而無需修改現(xiàn)有的代碼。

四、抽象工廠模式的代碼樣例

抽象工廠模式(Abstract Factory Pattern)是一種創(chuàng)建型設(shè)計模式,它提供一個接口用于創(chuàng)建一系列相關(guān)或相互依賴的對象,而無需指定具體類。抽象工廠模式適用于需要創(chuàng)建一組相互關(guān)聯(lián)的產(chǎn)品的情況,它將一組相關(guān)的工廠類封裝起來。

以下是一個用C++實現(xiàn)抽象工廠模式的示例:

#include <iostream>

// 抽象產(chǎn)品類A
class AbstractProductA {
public:
    virtual void operationA() = 0;
};

// 具體產(chǎn)品類A1
class ConcreteProductA1 : public AbstractProductA {
public:
    void operationA() override {
        std::cout << "ConcreteProductA1 operation." << std::endl;
    }
};

// 具體產(chǎn)品類A2
class ConcreteProductA2 : public AbstractProductA {
public:
    void operationA() override {
        std::cout << "ConcreteProductA2 operation." << std::endl;
    }
};

// 抽象產(chǎn)品類B
class AbstractProductB {
public:
    virtual void operationB() = 0;
};

// 具體產(chǎn)品類B1
class ConcreteProductB1 : public AbstractProductB {
public:
    void operationB() override {
        std::cout << "ConcreteProductB1 operation." << std::endl;
    }
};

// 具體產(chǎn)品類B2
class ConcreteProductB2 : public AbstractProductB {
public:
    void operationB() override {
        std::cout << "ConcreteProductB2 operation." << std::endl;
    }
};

// 抽象工廠類
class AbstractFactory {
public:
    virtual AbstractProductA* createProductA() = 0;
    virtual AbstractProductB* createProductB() = 0;
};

// 具體工廠類1
class ConcreteFactory1 : public AbstractFactory {
public:
    AbstractProductA* createProductA() override {
        return new ConcreteProductA1();
    }
    AbstractProductB* createProductB() override {
        return new ConcreteProductB1();
    }
};

// 具體工廠類2
class ConcreteFactory2 : public AbstractFactory {
public:
    AbstractProductA* createProductA() override {
        return new ConcreteProductA2();
    }
    AbstractProductB* createProductB() override {
        return new ConcreteProductB2();
    }
};

int main() {
    // 客戶端通過具體工廠來創(chuàng)建一組相關(guān)的產(chǎn)品
    AbstractFactory* factory1 = new ConcreteFactory1();
    AbstractProductA* productA1 = factory1->createProductA();
    AbstractProductB* productB1 = factory1->createProductB();
    productA1->operationA();
    productB1->operationB();
    delete factory1;
    delete productA1;
    delete productB1;

    AbstractFactory* factory2 = new ConcreteFactory2();
    AbstractProductA* productA2 = factory2->createProductA();
    AbstractProductB* productB2 = factory2->createProductB();
    productA2->operationA();
    productB2->operationB();
    delete factory2;
    delete productA2;
    delete productB2;

    return 0;
}

在這個例子中,我們定義了兩組相關(guān)的產(chǎn)品類:AbstractProductA 和 AbstractProductB,然后分別有兩個具體的產(chǎn)品類。抽象工廠類 AbstractFactory 定義了兩個純虛函數(shù),分別用于創(chuàng)建 AbstractProductA 和 AbstractProductB 對象。具體的工廠類 ConcreteFactory1 和 ConcreteFactory2 實現(xiàn)了這些方法,并創(chuàng)建特定類型的產(chǎn)品對象。

通過使用抽象工廠模式,客戶端可以通過具體的工廠來創(chuàng)建一組相關(guān)的產(chǎn)品,實現(xiàn)了一種創(chuàng)建一系列相互關(guān)聯(lián)產(chǎn)品的方式。這有助于實現(xiàn)高內(nèi)聚、低耦合的設(shè)計。

五、三種工廠模式之間的關(guān)系

這三種工廠模式(簡單工廠模式、工廠方法模式和抽象工廠模式)都是創(chuàng)建型設(shè)計模式,旨在解決對象的創(chuàng)建問題。它們之間有一些共同點,但也存在一些差異。下面是它們之間的關(guān)系和區(qū)別:

共同點:

  • 都關(guān)注對象的創(chuàng)建,封裝了對象的實例化過程,使客戶端代碼與具體創(chuàng)建邏輯分離。
  • 都遵循了開閉原則,即可以通過添加新的產(chǎn)品類或工廠類來擴展功能,而無需修改現(xiàn)有代碼。

差異:

  • 簡單工廠模式:雖然不是嚴格意義上的設(shè)計模式,但它是工廠模式的基礎(chǔ)。它通過一個共同的工廠類來創(chuàng)建不同類型的對象,客戶端根據(jù)參數(shù)來指定對象類型。適用于創(chuàng)建單一類別的對象。
  • 工廠方法模式:定義了一個工廠接口,由具體的工廠子類來實現(xiàn)工廠接口并創(chuàng)建特定類型的產(chǎn)品對象。每個工廠只負責創(chuàng)建一種產(chǎn)品。適用于創(chuàng)建一組相關(guān)的產(chǎn)品,每個產(chǎn)品有一個對應(yīng)的工廠。
  • 抽象工廠模式:提供了一種創(chuàng)建一組相關(guān)或相互依賴對象的接口,每個具體的工廠子類負責創(chuàng)建一組相關(guān)產(chǎn)品。適用于創(chuàng)建一組相互關(guān)聯(lián)的產(chǎn)品,每組產(chǎn)品都有一個對應(yīng)的工廠。

適用場景:

  • 簡單工廠模式適用于創(chuàng)建簡單的對象,例如基于傳入?yún)?shù)創(chuàng)建對象的情況。
  • 工廠方法模式適用于需要創(chuàng)建多種具有相同接口的產(chǎn)品,而且每種產(chǎn)品都有對應(yīng)的工廠。
  • 抽象工廠模式適用于創(chuàng)建一組相關(guān)或相互依賴的產(chǎn)品,且每組產(chǎn)品都有對應(yīng)的工廠。

總之,這三種工廠模式都在不同情況下提供了靈活的對象創(chuàng)建機制,可以根據(jù)具體的需求來選擇合適的模式。簡單工廠模式通常是基礎(chǔ),而工廠方法模式和抽象工廠模式則在更復(fù)雜的場景下提供更大的靈活性。

設(shè)計模式--工廠模式(Factory Pattern),面向?qū)ο?設(shè)計模式,c++,工廠模式,三種工廠模式,簡單工廠模式,工廠方法模式,抽象工廠模式文章來源地址http://www.zghlxwxcb.cn/news/detail-682606.html

到了這里,關(guān)于設(shè)計模式--工廠模式(Factory Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Factory Method Pattern 工廠方法模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

    Factory Method Pattern 工廠方法模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

    一句話解釋: ??實體類和工廠類均為單獨實現(xiàn),不影響已實現(xiàn)的類,方便擴展。 工廠方法模式(Factory Method Pattern)是一種創(chuàng)建型模式,它允許客戶端通過工廠方法來創(chuàng)建對象,而不是直接使用構(gòu)造函數(shù)。這樣可以讓客戶端代碼更加靈活,同時保持實現(xiàn)的獨立性。工廠方法

    2024年02月06日
    瀏覽(60)
  • Abstract Factory Pattern 抽象工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

    Abstract Factory Pattern 抽象工廠模式簡介與 C# 示例【創(chuàng)建型】【設(shè)計模式來了】

    一句話解釋: ??提供一個接口,以創(chuàng)建一系列相關(guān)或相互依賴的抽象對象,而無需指定它們具體的類。 (將一系列抽象類裝進接口,一次接口實現(xiàn),就必須實例化這一系列抽象類) 抽象工廠模式(Abstract Factory Pattern)是一種創(chuàng)建型模式。它用于創(chuàng)建一組相關(guān)對象的家族。

    2024年02月07日
    瀏覽(19)
  • 設(shè)計模式-工廠模式Factory

    設(shè)計模式-工廠模式Factory

    一般情況下,工廠模式分為三種更加細分的類型:簡單工廠、工廠方法和抽象工廠。 簡單工廠叫作靜態(tài)工廠方法模式(Static Factory Method Pattern) 現(xiàn)在有一個場景,需要一個資源加載器,要 根據(jù)不用的url 進行資源加載,但是如果我們將 所有的加載實現(xiàn)代碼全部封裝在了一個

    2024年02月09日
    瀏覽(17)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細節(jié),初窺模板設(shè)計模式、工廠設(shè)計模式與代理設(shè)計模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細節(jié),初窺模板設(shè)計模式、工廠設(shè)計模式與代理設(shè)計模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見設(shè)計模式; 抽象類是代碼開發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當于在語法程度上對子類進行了嚴格的定義限制,代碼的開發(fā)也就更加標準。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(26)
  • 【設(shè)計模式-04】Factory工廠模式

    【設(shè)計模式-04】Factory工廠模式

    簡單工廠 靜態(tài)工廠 工廠方法 FactoryMethod 產(chǎn)品維度擴展 抽象工廠 產(chǎn)品一族進行擴展 Spring IOC 任何可以產(chǎn)生對象的方法或類,都可以稱之為工廠 單例也是一種工廠 不可咬文嚼字,死扣概念 為什么有了new之后,還要有工廠? 靈活控制生產(chǎn)過程 權(quán)限、日志、修飾... 任意定制交通

    2024年02月02日
    瀏覽(23)
  • Java設(shè)計模式-簡單工廠(Simple Factory)模式

    簡單工廠(Simple Factory)模式,又稱為靜態(tài)工廠方法(Static Factory Method)模式。 由一個工廠類來創(chuàng)建具體產(chǎn)品,即創(chuàng)建具體類的實例。 簡單工廠模式從概念上涉及三個角色: 抽象產(chǎn)品角色:是具體類的父類,規(guī)定了所有類的共同行為。一般是抽象類、或者接口。 具體產(chǎn)品角

    2024年02月16日
    瀏覽(25)
  • 設(shè)計模式-創(chuàng)建型模式之抽象工廠模式(Abstract Factory)

    設(shè)計模式-創(chuàng)建型模式之抽象工廠模式(Abstract Factory)

    在工廠方法模式中具體工廠負責生產(chǎn)具體的產(chǎn)品,每一個具體工廠對應(yīng)一種具體產(chǎn)品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或者一組重載的工廠方法。但是有時候我們需要 一個工廠可以提供多個產(chǎn)品對象 ,而不是單一的產(chǎn)品對象。 為了更

    2023年04月20日
    瀏覽(31)
  • C++11 設(shè)計模式4. 抽象工廠(Abstract Factory)模式

    C++11 設(shè)計模式4. 抽象工廠(Abstract Factory)模式

    從前面我們已經(jīng)使用了工廠方法模式 解決了一些問題。 現(xiàn)在 策劃又提出了新的需求:對于各個怪物,在不同的場景下,怪物的面板數(shù)值會發(fā)生變化, ?? ?//怪物分類:亡靈類,元素類,機械類 ?? ?//戰(zhàn)斗場景分類:沼澤地區(qū),山脈地區(qū),城鎮(zhèn)。 那么就有9類怪物====沼澤地

    2024年04月14日
    瀏覽(22)
  • 設(shè)計模式詳解(一):工廠方法——Factory Method

    設(shè)計模式詳解(一):工廠方法——Factory Method

    工廠方法是一種創(chuàng)建型設(shè)計模式。所謂創(chuàng)建型設(shè)計模式是說針對創(chuàng)建對象方面的設(shè)計模式。在面向?qū)ο蟮木幊陶Z言里,我們通過對象間的相互協(xié)作,共同完成復(fù)雜的業(yè)務(wù)邏輯,因而對象之間存在著依賴關(guān)系。 當對象A依賴對象B時,我們不采取直接創(chuàng)建對象B的方式,即 B produ

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包