工厂方法模式
总体代码
//MySpider.h
#pragmaMySpider.h once
#include <memory>
using namespace std;
class MySpider
{
public:
virtual void Crawl() = 0;
};
class MySpiderFactory
{
public:
virtual shared_ptr< MySpider> CreateMySpider() = 0;
};
//MyTextImageSpider.h
#pragma once
#include "MySpider.h"
#include <iostream>
using namespace std;
class MyTextImageSpider :
public MySpider
{
public:
virtual void Crawl()
{
cout << "MyTextImageSpider::Crawl" << endl;
}
};
class MyTextImageSpiderFactory: public MySpiderFactory
{
public:
virtual shared_ptr< MySpider> CreateMySpider()
{
return make_shared< MyTextImageSpider>();
}
};
/ OOPDPFactorys0.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#include "MyTextImageSpider.h"
enum class SPIDERTYPE
{
TEXT,
IMAGE,
VIDEO
};
// 文字信息、图片信息和视频信息
class Spider
{
public:
virtual void Crawl() = 0;
};
class TextSpider :public Spider
{
public:
virtual void Crawl()
{
cout << "TextSpider::Crawl" << endl;
}
};
class ImageSpider :public Spider
{
public:
virtual void Crawl()
{
cout << "ImageTextSpider:Crawl" << endl;
}
};
class VideoSpider :public Spider
{
public:
virtual void Crawl()
{
cout << "VideoSpider::Crawl" << endl;
}
};
class SpiderFactory
{
public:
static shared_ptr<Spider> CreateSpyder(SPIDERTYPE type)
{
switch (type)
{
case SPIDERTYPE::TEXT:
return make_shared<TextSpider>();
case SPIDERTYPE::IMAGE:
return make_shared<ImageSpider>();
case SPIDERTYPE::VIDEO:
return make_shared<VideoSpider>();
default:
return nullptr;
}
}
};
int main()
{
//TextSpider s;
//s.Crawl();
// Simple Factory Model
SpiderFactory::CreateSpyder(SPIDERTYPE::IMAGE)->Crawl();
SpiderFactory::CreateSpyder(SPIDERTYPE::VIDEO)->Crawl();
// Factory Method
// TextImageFactory and TextImageSpider
shared_ptr< MySpiderFactory> textImageFactory = make_shared< MyTextImageSpiderFactory>();
shared_ptr< MySpider> myTextImageSpider = textImageFactory->CreateMySpider();
myTextImageSpider->Crawl();
}
标签:SPIDERTYPE,class,模式,方法,MySpider,shared,工厂,Crawl,public
From: https://www.cnblogs.com/Gal0721/p/17726373.html