같이 디자인 모델 배우 기 (4) - 추상 공장 모델

4360 단어
공장 모델 을 이해 하면 추상 적 인 공장 모델 은 말 할 것 도 없다.
추상 적 인 공장 모델 과 공장 모델 의 차 이 는 다음 과 같다.
공장 모델 중의 모든 공장 은 하나의 제품 만 만 만 들 수 있 고 추상 적 인 공장 모델 중의 모든 공장 은 여러 개의 제품 을 만 들 수 있다.
UML 은 다음 그림 과 같다.
/**
* @file AbstractFactory.h
* @brief 
* @author Don Hao
* @date 2011-9-1 16:40:09
* @version 
* <pre><b>copyright: </b></pre>
* <pre><b>email: </b>[email protected]</pre>
* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>
* <pre><b>All rights reserved.</b></pre>
* <pre><b>modification:</b></pre>
* <pre>Write modifications here.</pre>
*/
#ifndef _ABSTRACTFACTORY_H
#define _ABSTRACTFACTORY_H

#include <iostream>
#include <string>

class Fruit2
{
public:
    Fruit2()
    {

    }

    virtual ~Fruit2()
    {

    }
};

class Apple2: public Fruit2
{
public:
    Apple2()
    {
        std::cout << "Apple2" << std::endl;
    }

    virtual ~Apple2()
    {

    }
};

class pear2 : public Fruit2
{
public:
    pear2()
    {
        std::cout << "pear2" << std::endl;
    }
    virtual ~pear2()
    {

    }
};

class Box
{
public:
    Box()
    {
        
    }

    virtual ~Box()
    {

    }
};

class BoxRed : public Box
{
public:
    BoxRed()
    {
        std::cout << "Red Box" << std::endl;
    }

    virtual ~BoxRed()
    {

    }
};

class BoxBlue : public Box
{
public:
    BoxBlue()
    {
        std::cout << "Red Blue" << std::endl;
    }

    virtual ~BoxBlue()
    {

    }
};

class AbstractFactory
{
public:
    AbstractFactory()
    {

    }

    virtual ~AbstractFactory()
    {

    }

    virtual Fruit2* createFruit2() = 0;
    virtual Box* createBox() = 0;
};

class AbstractFactoryApple2 : public AbstractFactory
{
public:
    AbstractFactoryApple2()
    {

    }

    virtual ~AbstractFactoryApple2()
    {

    }

    virtual Fruit2* createFruit2()
    {
        return new Apple2();
    }

    virtual Box* createBox()
    {
        return new BoxRed();
    }
};

class AbstractFactoryPear2 : public AbstractFactory
{
public:
    AbstractFactoryPear2()
    {

    }

    virtual ~AbstractFactoryPear2()
    {

    }

    virtual Fruit2* createFruit2()
    {
        return new pear2();
    }

    virtual Box* createBox()
    {
        return new BoxBlue();
    }
};

#endif /**< _ABSTRACTFACTORY_H */

 
/**
* @file AbstractFactory.c
* @brief 
* @author Don Hao
* @date 2011-9-1 16:40:07
* @version 
* <pre><b>copyright: </b></pre>
* <pre><b>email: </b>[email protected]</pre>
* <pre><b>company: </b>http://blog.csdn.net/donhao</pre>
* <pre><b>All rights reserved.</b></pre>
* <pre><b>modification:</b></pre>
* <pre>Write modifications here.</pre>
*/
#include "AbstractFactory.h"

void main()
{
    AbstractFactoryApple2 afApple;
    Fruit2* apple = afApple.createFruit2();
    Box* appleBox = afApple.createBox();

    AbstractFactoryPear2 afPear;
    Fruit2* pear = afApple.createFruit2();
    Box* pearBox = afApple.createBox();
}

상례 에서 공장 모델 과 의 차 이 는 공장 마다 과일 을 만 들 수 있 을 뿐만 아니 라 해당 하 는 포장 상자 도 만 들 수 있다 는 것 이다.

좋은 웹페이지 즐겨찾기