假如我们想用同一个接口要创建不同的对象,这里比喻成一个“青年工厂”吧,该工厂可以生产以下3种青年:
- 普通青年
- 文艺青年
- 2B青年(因C++不允许以数字开头命名标识符,我改成SB青年吧)
工厂模式有3种:
- 简单工厂(它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类)
- 抽象工厂
- 工厂方式
简单工厂设计模式实现,比如某大学可以毕业这3种青年,缺点是如果有个其他类的青年,需要再修改工厂方法。
// FactotyModel.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <memory>
class YoungMan
{
public:
YoungMan(){};
virtual ~YoungMan(){};
virtual void talk() = 0;
};
//普通青年
class butongyoungman : public YoungMan
{
public:
butongyoungman(){};
virtual ~butongyoungman(){};
virtual void talk();
};
void butongyoungman::talk()
{
std::cout << "I am a 普通青年" << std::endl;
}
//文艺青年
class weyiyoungman : public YoungMan
{
public:
weyiyoungman(){};
virtual ~weyiyoungman(){};
virtual void talk();
};
void weyiyoungman::talk()
{
std::cout << "I am a 文艺青年" << std::endl;
}
class SByoungman : public YoungMan
{
public:
SByoungman(){};
virtual ~SByoungman(){};
virtual void talk();
};
void SByoungman::talk()
{
std::cout << "I am a 二逼青年" << std::endl;
}
enum YOUNGTYPE
{
kbutong = 0,
kwenyi = 1,
k2b = 2
};
//青年工厂
class youngmanFactory
{
public:
youngmanFactory(){};
~youngmanFactory(){};
static std::shared_ptr<YoungMan> CreateYoung(YOUNGTYPE ktype);
private:
};
std::shared_ptr<YoungMan> youngmanFactory::CreateYoung(YOUNGTYPE ktype)
{
switch (ktype)
{
case kbutong:
return std::shared_ptr<YoungMan>(new butongyoungman);
case kwenyi:
return std::shared_ptr<YoungMan>(new weyiyoungman);
case k2b:
return std::shared_ptr<YoungMan>(new SByoungman);
default:
break;
}
}
//main function
int _tmain(int argc, _TCHAR* argv[])
{
//YoungMan* btqn = youngmanFactory::CreateYoung(kbutong);
std::shared_ptr<YoungMan> btqn = youngmanFactory::CreateYoung(kbutong);
btqn->talk();
std::shared_ptr<YoungMan> wyqn = youngmanFactory::CreateYoung(kwenyi);
wyqn->talk();
std::shared_ptr<YoungMan> sbqn = youngmanFactory::CreateYoung(k2b);
sbqn->talk();
system("Pause");
return 0;
}
不恶搞了,其他2种工厂方法的实现可以参考:http://blog.csdn.net/wuzhekai1985/article/details/6660462
原文链接: https://www.cnblogs.com/awakenjoys/p/Factory.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/94396
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!