设计模式-抽象工厂模式

适用情境:定义一个类,此类创建一系列相关接口.

这里写图片描述

// product.h
#ifndef PRODUCT_H
#define PRODUCT_H

class Product
{
public:
    Product();
    virtual void Show() = 0;
public:
    int m_id;
};

#endif // PRODUCT_H
// product.cpp
#include "product.h"

Product::Product()
{}
// concreteproduct.h
#ifndef CONCRETEPRODUCT_H
#define CONCRETEPRODUCT_H

#include "product.h"

class ConcreteProduct : public Product
{
public:
    ConcreteProduct();
    virtual void Show();
};

#endif // CONCRETEPRODUCT_H
// concreteproduct.cpp
#include "concreteproduct.h"
#include <iostream>

ConcreteProduct::ConcreteProduct()
{}

void ConcreteProduct::Show()
{
    std::cout << m_id << std::endl;
}
// factory.h
#ifndef FACTORY_H
#define FACTORY_H

#include "product.h"

class Factory
{
public:
    Factory();
    virtual Product* CreateProduct() = 0;
};

#endif // FACTORY_H
// factory.cpp
#include "factory.h"

Factory::Factory()
{}
// concretefactory.h
#ifndef CONCRETEFACTORY_H
#define CONCRETEFACTORY_H

#include "factory.h"

class ConcreteFactory : public Factory
{
public:
    ConcreteFactory();
    virtual Product* CreateProduct();
};

#endif // CONCRETEFACTORY_H
// concretefactory.cpp
#include "concretefactory.h"
#include "concreteproduct.h"

ConcreteFactory::ConcreteFactory()
{}

Product* ConcreteFactory::CreateProduct()
{
    ConcreteProduct * product =  new ConcreteProduct();
    product->m_id = 222;
    return product;
}

客户端:

// main.cpp
#include <iostream>
#include "factory.h"
#include "product.h"
#include "concretefactory.h"
#include "concreteproduct.h"

using namespace std;

int main(int argc, char *argv[])
{
    Factory *factory = new ConcreteFactory();
    Product *product = factory->CreateProduct();

    product->Show();

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值