2022-08-01 工廠方法模式

工廠方法 == 開閉原則 + 簡單工廠

一.優(yōu)點

  1. 實現(xiàn)了對象創(chuàng)建和使?的分離。
  2. 系統(tǒng)的可擴展性也就變得?常好,?需修改接?和原類。

二.缺點

  1. 增加了類的個數(shù),增加了系統(tǒng)的抽象性和理解難度

三.使用場景

  1. 調(diào)用者不知道它所需要的對象的類。
  2. 抽象??類通過其?類工廠來指定創(chuàng)建哪個對象。
//Fruit.h
#pragma once
#include <string>
//抽象水果類
class Fruit
{
public:
    virtual std::string GetName() = 0;
};
//蘋果類:public Fruit
class Apple :public Fruit
{
public:
    std::string GetName() override;
};
//香蕉類:public Fruit
class Banana :public Fruit
{
public:
    std::string GetName() override;
};
//抽象工廠類
class AbstractFactory
{
public:
    virtual Fruit* CreateFruit() = 0;
};
//蘋果工廠類:public AbstractFactory
class AppleFactory :public AbstractFactory
{
public:
    Fruit* CreateFruit() override;
};
class BananaFactory :public AbstractFactory
{
public:
    Fruit* CreateFruit() override;
};
//Fruit.cpp
#include "Fruit.h"
#include <iostream>
std::string Apple::GetName()
{
    std::cout << "here is Apple" << std::endl;
    return std::string("Apple");
}
std::string Banana::GetName()
{
    std::cout << "here is Banana" << std::endl;
    return std::string("Banana");
}
Fruit* AppleFactory::CreateFruit()
{
    return new Apple;
}
Fruit* BananaFactory::CreateFruit()
{
    return new Banana;
}
//main.cpp
#include "Fruit.h"
#include <iostream>
int main()
{
    Fruit* apple = nullptr;
    AppleFactory apple_factory;
    apple = apple_factory.CreateFruit();
    std::cout << apple->GetName() << std::endl;
    if (apple!= nullptr)
    {
        delete apple;
        apple = nullptr;
    }
    Fruit* banana = nullptr;
    BananaFactory banana_factory;
    banana = banana_factory.CreateFruit();
    std::cout << banana->GetName() << std::endl;
    if (banana != nullptr)
    {
        delete banana;
        banana = nullptr;
    }
    system("pause");
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容