首页 > 其他分享 >工厂方法模式

工厂方法模式

时间:2023-09-24 18:11:06浏览次数:48  
标签:SPIDERTYPE class 模式 方法 MySpider shared 工厂 Crawl public

工厂方法模式

总体代码

//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

相关文章

  • 阿波罗H743开发板串口下载0KB出错,使用STLINK解决方法
    导师那边的博后给了一块正点原子的阿波罗H743(非常不好意思地花了人家600+,我还以为是实验室那边本来就有的开发板给我学习呢,结果给我买了全新的还带一个wifi模块,越发觉得任重道远今天尝试连电脑使用,并按照原子那边的教程用flyMCU下载hex文件,反正就是用它一下载,第一遍烧录可以,第二......
  • 单例模式(正式)
    当需要严格控制一个类在全局只有唯一一个实例,并且可以随时调用它的时候,就可以使用单例模式。单例模式可以以实例化时间分为懒汉式和饿汉式、以C实现方式分为C++98的实现以及C++11的实现。懒汉式c++11classSingleton{public:staticSingleton*getInstance(){ i......
  • 1.多线程(实现方式,常用方法,生命周期)
    多线程(实现方式,常用方法,生命周期)概述:可以让程序同时做多件事情;可以提高效率;只要你想让多个事情同时运行就需要用到多线程;如: 软件中的耗时操作、所有的聊天软件、所有的服务器‘并发和并行:并发:在同一时刻,有多个指令在单个CPU上交替执行;并行:在同一时刻,有多......
  • 建造者模式
    建造者模式动机将一个复杂对象的创建过程及其表示分离,同一个创建过程可以创建不同的表示当需要创建一个包含多个部分或配置选项的复杂对象,并且需要将构建过程与表示分离时,建造者模式很有用帮助你灵活地构建不同配置的对象,同时保持构建过程的清晰性和可维护性经典Builder模......
  • 关于闭环控制电路设计方法上的一点思考
        闭环控制电路在实际设计中应用比较多,之所以需要闭环控制,就是需要应对系统外部的控制的。以下一些自己的感悟是《OperationalAmplifierSpeedandAccuracyImprovement》的读后感。就像有些时候,听到一首歌,一句诗,会给你一种“代入感”,就像很多人看电影听到那句“轻舟......
  • isPrimitive()方法和包装类
    java.lang.Class.isprimitive()是说:确定指定的Class对象是基本类型,其返回是个boolean值,true代表你指定的这个Class对象是基本类型,false代表这个Class对象不是基本类型。所以在java.lang.Class.isPrimitive()中: .isPrimitive()是用来判断是否是基本类型的:           ......
  • 工厂模式(正式)
    抽象工厂模式及示例模式的动机提供一种接口,用于创建一系列相关或相互依赖的对象抽象工厂模式通过引入抽象工厂接口,允许客户端代码通过工厂接口创建产品,而不需要关心具体的产品类;使得客户端代码可以与特定产品的具体类解耦,实现了抽象和实现的分离模式的实现抽象的......
  • Kibana数据索引模式设计策略案例
    前言Kibana是一个非常流行的数据可视化工具,它可以帮助我们快速地对数据进行分析和展示。在使用Kibana的过程中,数据索引模式的设计非常重要,它直接影响到我们对数据的查询和分析效率。本文将介绍一些Kibana数据索引模式设计的策略案例,希望能够帮助大家更好地使用Kibana。策略一:尽量......
  • ClickHouse数据表合并与性能优化方法探讨与案例研究分享
    前言ClickHouse是一款高性能的列式数据库,其在海量数据处理方面具有很强的优势。但是,在实际应用中,我们经常需要对多个数据表进行合并,以便更好地进行数据分析和挖掘。本文将探讨ClickHouse的数据表合并与性能优化方法,并结合实际案例进行分享。数据表合并在ClickHouse中,数据表合并......
  • 代理模式
    工作场景:让用户根据接口查询系统各资源占用率优化用户性能传统代码:传统代码//main.cpp#include<iostream>#include"ServerInfoGetter.h"#include<chrono>#include<thread>intmain(){ ServerInfoGettergetter; ServerInfoinfo=getter.getInfo(); whil......