栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式--抽象工厂模式(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式--抽象工厂模式(C++)

抽象工厂可以理解为简单工厂模式和工厂方法模式的结合,抽象工厂模式拥有多个工厂,每个工厂又可以生产多种产品;可大致理解为简单工厂模式是一个工厂,自己一对多;工厂方法模式是多个工厂,每个工厂一对一;抽象工厂模式是多个工厂,每个工厂一对多;

1.产品接口Human (人类,其子类有黄种人、白种人)

#pragma once
class Human
{
public:
	Human();
	virtual ~Human();
	virtual void character() = 0;
	virtual void Sex() = 0;
private:

};

Human::Human()
{
}

Human::~Human()
{
}

2.抽象产品1 WhiteHuman (白种人,其子类有白种男孩、白种女孩)

#pragma once
#include "Human.h"
#include 
class WhiteHuman:public Human
{
public:
	WhiteHuman();
	virtual ~WhiteHuman();
	void character();
	virtual void Sex()=0;
private:

};

WhiteHuman::WhiteHuman()
{
}

WhiteHuman::~WhiteHuman()
{
}

void WhiteHuman::character()
{
	std::cout << "白种人性格贪婪" << std::endl;
}

2.1 具体产品1 (白种男孩)

#pragma once
#include "WhiteHuman.h"
class WhiteBoyHuman:public WhiteHuman
{
public:
	WhiteBoyHuman();
	~WhiteBoyHuman();
	void Sex();
private:

};

WhiteBoyHuman::WhiteBoyHuman()
{
}

WhiteBoyHuman::~WhiteBoyHuman()
{
}

void WhiteBoyHuman::Sex()
{
	std::cout << "白种男孩的性别是男" << std::endl;
}

2.2 具体产品2 (白种女孩)

#pragma once
#include "WhiteHuman.h"
class WhiteGirlHuman:public WhiteHuman
{
public:
	WhiteGirlHuman();
	~WhiteGirlHuman();
	void Sex();
private:

};

WhiteGirlHuman::WhiteGirlHuman()
{
}

WhiteGirlHuman::~WhiteGirlHuman()
{
}

void WhiteGirlHuman::Sex()
{
	std::cout << "白种女孩的性别是女" << std::endl;
}

3.抽象产品2 YellowHuman(黄种人,其子类有黄种男孩、黄种女孩)

#pragma once
#include "Human.h"
#include 
class YellowHuman:public Human
{
public:
	YellowHuman();
	~YellowHuman();
	void character();
	void Sex()=0;
private:

};

YellowHuman::YellowHuman()
{
}

YellowHuman::~YellowHuman()
{
}


void YellowHuman::character()
{
	std::cout << "黄种人性格温良" << std::endl;
}

3.1 具体产品1 (黄种男孩)

#pragma once
#include "YellowHuman.h"
class YellowBoyHuman:public YellowHuman
{
public:
	YellowBoyHuman();
	~YellowBoyHuman();
	void Sex();
private:

};

YellowBoyHuman::YellowBoyHuman()
{
}

YellowBoyHuman::~YellowBoyHuman()
{
}

void YellowBoyHuman::Sex()
{
	std::cout << "黄种男孩的性别是男" << std::endl;
}

3.2 具体产品2 (黄种女孩)

#pragma once
#include "YellowHuman.h"
class YellowGirlHuman:public YellowHuman
{
public:
	YellowGirlHuman();
	~YellowGirlHuman();
	void Sex();
private:

};

YellowGirlHuman::YellowGirlHuman()
{
}

YellowGirlHuman::~YellowGirlHuman()
{
}

void YellowGirlHuman::Sex()
{
	std::cout << "黄种女孩的性别是女" << std::endl;
}

4.抽象工厂

#pragma once
#include "Human.h"
#include "WhiteHuman.h"
#include "YellowHuman.h"
#include
#include 
class CreatHumanFactory
{
public:
	CreatHumanFactory();
	virtual ~CreatHumanFactory();
	virtual Human* creatWhiteHuman() = 0;
	virtual Human* creatYellowHuman() = 0;
private:

};

CreatHumanFactory::CreatHumanFactory()
{
}

CreatHumanFactory::~CreatHumanFactory()
{
}

5.男人工厂 (生产白种男孩、黄种男孩)

#pragma once
#include "CreatHumanFactory.h"
#include "WhiteHuman.h"
#include "WhiteBoyHuman.h"
#include "YellowBoyHuman.h"
class CreateBoyHumanFactory :public CreatHumanFactory
{
public:
	CreateBoyHumanFactory();
	~CreateBoyHumanFactory();
	Human* creatWhiteHuman();
	Human* creatYellowHuman();
private:

};

CreateBoyHumanFactory::CreateBoyHumanFactory()
{
}

CreateBoyHumanFactory::~CreateBoyHumanFactory()
{
}

Human* CreateBoyHumanFactory::creatWhiteHuman()
{
	return new WhiteBoyHuman();
}

Human* CreateBoyHumanFactory::creatYellowHuman()
{
	return new YellowBoyHuman();
}

6.女人工厂 (生产白种女孩、黄种女孩)

#pragma once
#include "CreatHumanFactory.h"
#include "YellowHuman.h"
#include "WhiteGirlHuman.h"
#include "YellowGirlHuman.h"
class CreateGirlHumanFactory:public CreatHumanFactory
{
public:
	CreateGirlHumanFactory();
	~CreateGirlHumanFactory();
	Human* creatWhiteHuman();
	Human* creatYellowHuman();
private:

};

CreateGirlHumanFactory::CreateGirlHumanFactory()
{
}

CreateGirlHumanFactory::~CreateGirlHumanFactory()
{
}

Human*  CreateGirlHumanFactory::creatWhiteHuman()
{
	return new WhiteGirlHuman();
}

Human* CreateGirlHumanFactory::creatYellowHuman()
{
	return new YellowGirlHuman();
}

7.主程序

// 抽象工厂模式.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "CreatHumanFactory.h"
#include "CreateBoyHumanFactory.h"
#include "CreateGirlHumanFactory.h"
#include "Human.h"
#include "WhiteHuman.h"
#include "YellowHuman.h"
#include 

int main()
{
    CreateBoyHumanFactory* pBoyFactory = new CreateBoyHumanFactory();
    Human* pWhiteBoy = pBoyFactory->creatWhiteHuman();
    pWhiteBoy->character();
    pWhiteBoy->Sex();
	Human* pYellowBoy = pBoyFactory->creatYellowHuman();
    pYellowBoy->character();
    pYellowBoy->Sex();
	delete pBoyFactory;
	delete pWhiteBoy;
	delete pYellowBoy;
	std::cout << std::endl;

	CreateGirlHumanFactory* pGirlFactory = new CreateGirlHumanFactory();
	Human* pWhiteGirl = pGirlFactory->creatWhiteHuman();
	pWhiteGirl->character();
	pWhiteGirl->Sex();
	Human* pYellowGirl = pGirlFactory->creatYellowHuman();
	pYellowGirl->character();
	pYellowGirl->Sex();
	delete pGirlFactory;
	delete pWhiteGirl;
	delete pYellowGirl;

    system("pause");
    return 0;
}


8.结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/738047.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号