码迷,mamicode.com
首页 > 其他好文 > 详细

AbstractFactory Pattern

时间:2015-05-20 17:41:46      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

假设我们要开发一款过关游戏,每个关卡都有以下难度:普通,冒险,王者,地狱,每个关卡都有一些怪物 守着, 玩家要把这些怪物干掉才可以过关。在每个关卡, 我们都要创建怪物的实例,例如初级就创建初级怪物( 有很多种类)、中级创建中级怪物等。这种情况下就可以用抽象工厂模式
Product.h

#ifndef _PRODUCT_H
#define _PRODUCT_H

class AbstractProductA {
public :
    virtual ~AbstractProductA();
protected :
    AbstractProductA();
};

class AbstractProductB {
public :
    virtual ~AbstractProductB();
protected :
    AbstractProductB();
};

class ProductA1 : public AbstractProductA {
public :
    ProductA1();
    ~ProductA1();
};

class ProductA2 : public AbstractProductA {
public :
    ProductA2();
    ~ProductA2();
};

class ProductB1 : public AbstractProductB {
public :
    ProductB1();
    ~ProductB1();
};

class ProductB2 : public AbstractProductB {
public :
    ProductB2();
    ~ProductB2();
};

#endif

Product.cpp

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

AbstractProductA::AbstractProductA() {}

AbstractProductA::~AbstractProductA() {}

AbstractProductB::AbstractProductB() {}

AbstractProductB::~AbstractProductB() {}

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() {}

AbstractFactory.h

#ifndef _ABSTRACTFACTORY_H
#define _ABSTRACTFACTORY_H

class AbstractProductA;
class AbstractProductB;

class AbstractFactory {
public :
    virtual ~AbstractFactory();
    virtual AbstractProductA *CreateProductA() = 0;
    virtual AbstractProductB *CreateProductB() = 0;
protected :
    AbstractFactory();
};

class ConcreateFactory1 : public AbstractFactory {
public :
    ConcreateFactory1();
    ~ConcreateFactory1();
    AbstractProductA *CreateProductA();
    AbstractProductB *CreateProductB();
};

class ConcreateFactory2 : public AbstractFactory {
public :
    ConcreateFactory2();
    ~ConcreateFactory2();
    AbstractProductA *CreateProductA();
    AbstractProductB *CreateProductB();
};

#endif

AbstractFactory.cpp

#include "AbstractFactory.h"
#include "Product.h"
#include <iostream>
using namespace std;

AbstractFactory::AbstractFactory() {}

AbstractFactory::~AbstractFactory() {}

ConcreateFactory1::ConcreateFactory1() {}

ConcreateFactory1::~ConcreateFactory1() {}

AbstractProductA *ConcreateFactory1::CreateProductA() {
    return new ProductA1();
}

AbstractProductB *ConcreateFactory1::CreateProductB() {
    return new ProductB1();
}

ConcreateFactory2::ConcreateFactory2() {}

ConcreateFactory2::~ConcreateFactory2() {}

AbstractProductA *ConcreateFactory2::CreateProductA() {
    return new ProductA2();
}

AbstractProductB *ConcreateFactory2::CreateProductB() {
    return new ProductB2();
}

Main.cpp

#include "AbstractFactory.h"
#include "Product.h"
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {

    AbstractFactory *cf1 = new ConcreateFactory1();
    cf1->CreateProductA();
    cf1->CreateProductB();

    AbstractFactory *cf2 = new ConcreateFactory2();
    cf2->CreateProductA();
    cf2->CreateProductB();

    return 0;
}

AbstractFactory Pattern

标签:

原文地址:http://www.cnblogs.com/Susake/p/4517520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!