设计模式学习笔记DAY02-抽象工厂模式(AbstractFactory)

二、抽象工厂模式(Abstract Factory)
1.定义
        提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
2.抽象工厂模式与工厂方法模式的区别
        为了更好的理解工厂模式非常有必要将抽象工厂模式与工厂方法模式进行对比。工厂方法模式是一种极端情况的抽象工厂模式,它是对应与一个类(一个类的对象),而抽象工厂模式可以看成是工厂方法模式的一种推广,是针对于一系列类(多个类的对象)。
    工厂方法模式:一个抽象产品类,然后在此基础上派生出多个具体产品类。一个抽象工厂类,然后派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。  
    抽象工厂模式:多个抽象产品类,然后每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,然后派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。
    例子:还是以CPU为例现在市场上最热的两个CPU厂商为Inter和AMD,它们都各自有各自的单核、双核CPU,假设现在有两家代加工的工厂三星和富士康,它们都同时给Inter和AMD加工不同型号的CPU,现在需要拿出所有的产品测试一下。

//AbstractFactory.h
#pragma once

typedef enum
{
	SINGLE_CORE = 0,
	DOUBLE_CORE
}CORE_TYPE;

class InterCPU
{
	public:
		virtual void Run() = 0;
};

class InterSingleCore :public InterCPU
{
	public:
		void Run();
};

class InterDoubleCore :public InterCPU
{
	public:
		void Run();
};

class AMDCPU
{
public:
	virtual void Run() = 0;
};

class AMDSingleCore :public AMDCPU
{
public:
	void Run();
};

class AMDDoubleCore :public AMDCPU
{
public:
	void Run();
};

class CPUFactory
{
	public:
		virtual InterCPU* CreateInterCPU(CORE_TYPE eType) = 0;
		virtual AMDCPU* CreateAMDCPU(CORE_TYPE eType) = 0;
};
class SamsungFactory :public CPUFactory
{
	public:
		InterCPU* CreateInterCPU(CORE_TYPE eType);
		AMDCPU* CreateAMDCPU(CORE_TYPE eType);
};
class FoxconnFactory :public CPUFactory
{
	public:
		InterCPU* CreateInterCPU(CORE_TYPE eType);
		AMDCPU* CreateAMDCPU(CORE_TYPE eType);
};
//AbstractFactory.cpp
#include "StdAfx.h"
#include "Factory.h"
#include <iostream>
using namespace std;

void InterSingleCore::Run()
{
	cout<<"InterSingleCoreRun"<<endl;
}

void InterDoubleCore::Run()
{
	cout<<"InterDoubleCoreRun"<<endl;
}

void AMDSingleCore::Run()
{
	cout<<"AMDSingleCoreRun"<<endl;
}

void AMDDoubleCore::Run()
{
	cout<<"AMDDoubleCoreRun"<<endl;
}

AMDCPU* SamsungFactory::CreateAMDCPU(CORE_TYPE eType)
{
	switch (eType)
	{
		case SINGLE_CORE:
			return new AMDSingleCore(); 
			break;
		case DOUBLE_CORE:
			return new AMDDoubleCore();
			break;
		default:
			return new AMDDoubleCore();
			break;
	}
}

InterCPU* SamsungFactory::CreateInterCPU(CORE_TYPE eType)
{
	switch (eType)
	{
		case SINGLE_CORE:
			return new InterSingleCore(); 
			break;
		case DOUBLE_CORE:
			return new InterDoubleCore();
			break;
		default:
			return new InterDoubleCore();
			break;
	}	
}

AMDCPU* FoxconnFactory::CreateAMDCPU(CORE_TYPE eType)
{
	switch (eType)
	{
		case SINGLE_CORE:
			return new AMDSingleCore(); 
			break;
		case DOUBLE_CORE:
			return new AMDDoubleCore();
			break;
		default:
			return new AMDDoubleCore();
			break;
	}
}

InterCPU* FoxconnFactory::CreateInterCPU(CORE_TYPE eType)
{
	switch (eType)
	{
		case SINGLE_CORE:
			return new InterSingleCore(); 
			break;
		case DOUBLE_CORE:
			return new InterDoubleCore();
			break;
		default:
			return new InterDoubleCore();
			break;
	}
}
//main.cpp
#include "stdafx.h"
#include "Factory.h"

int _tmain(int argc, _TCHAR* argv[])
{
	CPUFactory *pSamFac = new SamsungFactory();
	AMDCPU *pAMDCPU = pSamFac->CreateAMDCPU(SINGLE_CORE);
	pAMDCPU->Run();

	pAMDCPU = pSamFac->CreateAMDCPU(DOUBLE_CORE);
	pAMDCPU->Run();

	InterCPU* pInterCPU;
	pInterCPU = pSamFac->CreateInterCPU(SINGLE_CORE);
	pInterCPU->Run();

	pInterCPU = pSamFac->CreateInterCPU(DOUBLE_CORE);
	pInterCPU->Run();

	CPUFactory *pFoxFac = new FoxconnFactory();
	pAMDCPU = pFoxFac->CreateAMDCPU(SINGLE_CORE);
	pAMDCPU->Run();

	pAMDCPU = pFoxFac->CreateAMDCPU(DOUBLE_CORE);
	pAMDCPU->Run();

	pInterCPU = pFoxFac->CreateInterCPU(SINGLE_CORE);
	pInterCPU->Run();
	
	pInterCPU =	pFoxFac->CreateInterCPU(DOUBLE_CORE);
	pInterCPU->Run();
	
	while(1);
	return 0;
}

        AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而 Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory 模式通常都是使用 Factory 模式实现。
 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值