带你深入浅出设计模式:六、抽象工厂模式:一键生成对象系列的秘诀

此为设计模式谈!

总-分-总的结构生活化的例子给你讲解设计模式!

码农不易,各位学者学到东西请点赞收藏支持支持!

开始部分:

总:抽象工厂模式主要解决的是创建一系列相关的对象,而无需指定这些对象的具体类。

分:

1.老规矩,在vs中创建一个控制台应用

2.实现编码,这里用了一个汽车制造厂的例子来讲解,根据不同的地区来生产不同类型的汽车和轮胎。

2.1 实现抽象产品类,定义汽车类和轮胎类

2.2 具体产品类:欧洲汽车类、欧洲轮胎类、美洲汽车类、美洲轮胎类

2.3 抽象工厂类:定义创建汽车和轮胎的接口

2.4 具体工厂类:实现具体的汽车和轮胎的创建

// 抽象汽车类
class AbstractCar {
public:
    virtual void PrintName() = 0;
    AbstractCar() { cout << "抽象汽车构造函数." << endl; }
    virtual ~AbstractCar() { cout << "抽象汽车析构函数." << endl; }
};

// 抽象轮胎类
class AbstractTire {
public:
    virtual void PrintName() = 0;
    AbstractTire() { cout << "抽象轮胎构造函数." << endl; }
    virtual ~AbstractTire() { cout << "抽象轮胎析构函数." << endl; }
};


// 欧洲汽车和轮胎
class EuroCar : public AbstractCar {
public:
    void PrintName() override { cout << "欧洲汽车:奔驰." << endl; }
    EuroCar() { cout << "欧洲汽车构造函数." << endl; }
    ~EuroCar() override { cout << "欧洲汽车析构函数." << endl; }
};

class EuroTire : public AbstractTire {
public:
    void PrintName() override { cout << "欧洲轮胎:米其林." << endl; }
    EuroTire() { cout << "欧洲轮胎构造函数." << endl; }
    ~EuroTire() { cout << "欧洲轮胎析构函数." << endl; }
};

// 美洲汽车和轮胎
class USCar : public AbstractCar {
public:
    void PrintName() override { cout << "美洲汽车:福特." << endl; }
    USCar() { cout << "美洲汽车构造函数." << endl; }
    ~USCar() override { cout << "美洲汽车析构函数." << endl; }
};

class USTire : public AbstractTire {
public:
    void PrintName() override { cout << "美洲轮胎:固特异." << endl; }
    USTire() { cout << "美洲轮胎构造函数." << endl; }
    ~USTire() { cout << "美洲轮胎析构函数." << endl; }
};

// 抽象汽车制造厂类
class AbstractCarFactory {
public:
    virtual AbstractCar* CreateCar() = 0;
    virtual AbstractTire* CreateTire() = 0;
    AbstractCarFactory() { cout << "抽象汽车制造厂构造函数." << endl; }
    virtual ~AbstractCarFactory() { cout << "抽象汽车制造厂析构函数." << endl; }
};

// 欧洲汽车制造厂
class EuroCarFactory : public AbstractCarFactory {
public:
    AbstractCar* CreateCar() override { return new EuroCar; }
    AbstractTire* CreateTire() override { return new EuroTire; }
    EuroCarFactory() { cout << "欧洲汽车制造厂构造函数." << endl; }
    ~EuroCarFactory() { cout << "欧洲汽车制造厂析构函数." << endl; }
};

// 美洲汽车制造厂
class USCarFactory : public AbstractCarFactory {
public:
    AbstractCar* CreateCar() override { return new USCar; }
    AbstractTire* CreateTire() override { return new USTire; }
    USCarFactory() { cout << "美洲汽车制造厂构造函数." << endl; }
    ~USCarFactory() { cout << "美洲汽车制造厂析构函数." << endl; }
};

int main() {
    AbstractCarFactory* euroFactory = new EuroCarFactory;
    AbstractCar* euroCar = euroFactory->CreateCar();
    AbstractTire* euroTire = euroFactory->CreateTire();
    euroCar->PrintName();
    euroTire->PrintName();
    delete euroTire; euroTire = nullptr;
    delete euroCar; euroCar = nullptr;
    delete euroFactory; euroFactory = nullptr;

    AbstractCarFactory* usFactory = new USCarFactory;
    AbstractCar* usCar = usFactory->CreateCar();
    AbstractTire* usTire = usFactory->CreateTire();
    usCar->PrintName();
    usTire->PrintName();
    delete usTire; usTire = nullptr;
    delete usCar; usCar = nullptr;
    delete usFactory; usFactory = nullptr;

    return 0;
}

总:对比于简单工厂模式,抽象工厂模式多的是一系列的产品

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值