设计模式----AbstructFactory模式(简单C++实现)

Abstruct Pattern

在这里插入图片描述

AbstructProduct.h

#ifndef _ABSTRUCTPRODUCT_H_
#define _ABSTRUCTPRODUCT_H_

class abstructproductA {
public:
    virtual ~abstructproductA();

protected:
    abstructproductA();
private:

};

class abstructproductB {
public:
    virtual ~abstructproductB();

protected:
    abstructproductB();
private:

};

class productA1 : public abstructproductA {
public:
    productA1();
    ~productA1();
protected:
private:
};

class productA2 : public abstructproductA {
public:
    productA2();
    ~productA2();
protected:
private:
};

class productB1 : public abstructproductB {
public:
    productB1();
    ~productB1();
protected:
private:
};

class productB2 : public abstructproductB {
public:
    productB2();
    ~productB2();
protected:
private:
};

#endif
#include"abstructProduct.h"
#include<iostream>
using namespace std;

abstructproductA::abstructproductA() {

}

abstructproductA::~abstructproductA() {
    
}

abstructproductB::abstructproductB() {
    
}

abstructproductB::~abstructproductB() {
    
}

productA1::productA1() {
    cout<<"productA1..."<<endl;
}

productA1::~productA1() {
}

productA2::productA2() {
    cout<<"productA2..."<<endl;
}

productA2::~productA2() {
}

productB1::productB1() {
    cout<<"productB1..."<<endl;
}

productB1::~productB1() {
}

productB2::productB2() {
    cout<<"productB2..."<<endl;
}

productB2::~productB2() {
}

AbstructFactory.h

#ifndef _ABSTRUCTFACTORY_H_
#define _ABSTRUCTFACTORY_H_
#include"abstructProduct.h"
class abstructFactory{
public:
    virtual ~abstructFactory();
    virtual abstructproductA* createProductA() = 0;
    virtual abstructproductB* createProductB() = 0;
protected:
    abstructFactory(/* args */);
private:
    /* data */
};

class concreteFactory1 : public  abstructFactory {
public:
    concreteFactory1();
    ~concreteFactory1();
    abstructproductA* createProductA();
    abstructproductB* createProductB();
protected:
private:
};

class concreteFactory2 : public  abstructFactory {
public:
    concreteFactory2();
    ~concreteFactory2();
    abstructproductA* createProductA();
    abstructproductB* createProductB();
protected:
private:
};

#endif
#include"abstructFactory.h"
#include<iostream>
using namespace std;


abstructFactory::abstructFactory(/* args */)
{
}

abstructFactory::~abstructFactory()
{
}

concreteFactory1::concreteFactory1() {

}

concreteFactory1::~concreteFactory1() {

}

abstructproductA* concreteFactory1::createProductA() {
    return new productA1();
}

abstructproductB* concreteFactory1::createProductB() {
    return new productB1();
}


concreteFactory2::concreteFactory2() {

}

concreteFactory2::~concreteFactory2() {

}

abstructproductA* concreteFactory2::createProductA() {
    return new productA2();
}

abstructproductB* concreteFactory2::createProductB() {
    return new productB2();
}


main.cpp

#include"abstructProduct.h"
#include"abstructFactory.h"

#include<iostream>
using namespace std;
int main()
{
    abstructFactory *cf1 = new concreteFactory1();
    abstructFactory *cf2 = new concreteFactory2();

    cf1->createProductA();
    cf1->createProductB();

    cf2->createProductA();
    cf2->createProductB();
    return 0;
}

运行结果:
在这里插入图片描述

极大简化了代码,假设在打游戏,怪物分为初级、中级、高级,那么一个工厂就相当于一级(其中随机生成不同种类怪物(也就是上面的productA,productB))。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值