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

设计模式--工厂类进阶

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

设计模式--工厂类进阶

1 工厂模式逻辑图

第一篇:工厂模式1

1.1 简单工厂模式

1.2 工厂模式


注:一个具体工厂只能生产一个产品;

1.3抽象工厂模式


注:一个具体工厂可以生产多个个产品;

2工厂模式改进 2.1 工厂模式缺点
    简单工厂模式在新增加产品的时候需要去修改工厂类,违反了开闭原则工厂模式以及抽象工厂模式在增加产品的时候需要去增加一个新的产品类,加大了代码量;
2.2 工厂模式改进

模板类工厂
(参考:工厂模式进阶)

具体思路:依旧是抽象工厂的组成形式(具体产品,抽象产品,具体工厂,抽象工厂)
结构图如下:

代码实例:
产品类(具体产品以及抽象产品)

#pragma once
#include
#include
using namespace std;
class close
{
public:
	virtual void show() = 0;
	virtual void printName() = 0;
	virtual ~close()
	{

	}
};

class NikeClose: public close
{
public:
	NikeClose()
	{
		printName();
	}
	~NikeClose()
	{
		std::cout << "Nike衣服GG" << endl;
	}
	void printName()
	{
		std::cout << "Nike衣服起来了!!" << endl;
	}
	void show()
	{
		std::cout << "Nike衣服牛逼" << endl;
	}


};

class shoes
{
public:
	virtual void show() = 0;
	virtual void printName() = 0;
	virtual ~shoes()
	{

	}
};

class LiNingShose : public shoes
{
public:
	LiNingShose()
	{
		printName();
	}
	~LiNingShose()
	{
		std::cout << "LN鞋子GG" << endl;
	}
	void printName()
	{
		std::cout << "LN鞋子起来了!!" << endl;
	}
	void show()
	{
		std::cout << "LN鞋子牛逼" << endl;
	}


};

工厂类代码(使用模板类)

template
class Abs_factory
{
public:
	virtual Abs_Porduct* Create()=0;
	virtual ~Abs_factory()
	{

	}
};

template//定义一个抽象产品,以及一个具体产品类
class real_factory :public Abs_factory
{
public:
	real_factory()
	{
		std::cout << "好起来了" << endl;
	}
	Abs_Porduct* Create()
	{
		return new real_product();
	}
	~real_factory()
	{
		std::cout << "坏起来了" << endl;
	}
	

	
};

客户端主程序:

#include
#include
#include"factory.h"
using namespace std;
int main()
{
	real_factory nike_factory;

	close*pnikeClo = nike_factory.Create();
	if (pnikeClo)
	{
		pnikeClo->show();
		delete pnikeClo;
		pnikeClo = NULL;
	}

	real_factory LN_factory;

	shoes*pLNshoes = LN_factory.Create();
	if (pLNshoes)
	{
		pLNshoes->show();
		delete pLNshoes;
		pLNshoes = NULL;
	}

	return 0;

}

运行结果

总结:由此代码可以得出:在我们需要添加一个新产品的时候,我们只需要添加一个具体产品的类,不用去修改工厂类的代码,同时也需要去添加一条具体的工厂线;

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

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

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