같이 디자인 모델 배우 기 (4) - 추상 공장 모델
추상 적 인 공장 모델 과 공장 모델 의 차 이 는 다음 과 같다.
공장 모델 중의 모든 공장 은 하나의 제품 만 만 만 들 수 있 고 추상 적 인 공장 모델 중의 모든 공장 은 여러 개의 제품 을 만 들 수 있다.
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();
}
상례 에서 공장 모델 과 의 차 이 는 공장 마다 과일 을 만 들 수 있 을 뿐만 아니 라 해당 하 는 포장 상자 도 만 들 수 있다 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.