工厂方法模式

发布时间 2023-09-24 18:10:27作者: 游客0721

工厂方法模式

总体代码

//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();
}