设计模式--工厂类进阶

编程入门 行业动态 更新时间:2024-10-28 11:27:00

设计模式--工厂类<a href=https://www.elefans.com/category/jswz/34/1769503.html style=进阶"/>

设计模式--工厂类进阶

1 工厂模式逻辑图

第一篇:工厂模式1

1.1 简单工厂模式

1.2 工厂模式


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

1.3抽象工厂模式


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

2工厂模式改进

2.1 工厂模式缺点

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

2.2 工厂模式改进

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

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

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

#pragma once
#include<iostream>
#include<string>
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_Porduct>
class Abs_factory
{
public:virtual Abs_Porduct* Create()=0;virtual ~Abs_factory(){}
};template<class Abs_Porduct,class real_product>//定义一个抽象产品,以及一个具体产品类
class real_factory :public Abs_factory<Abs_Porduct>
{
public:real_factory(){std::cout << "好起来了" << endl;}Abs_Porduct* Create(){return new real_product();}~real_factory(){std::cout << "坏起来了" << endl;}};

客户端主程序:

#include<iostream>
#include<string>
#include"factory.h"
using namespace std;
int main()
{real_factory<close, NikeClose> nike_factory;close*pnikeClo = nike_factory.Create();if (pnikeClo){pnikeClo->show();delete pnikeClo;pnikeClo = NULL;}real_factory<shoes, LiNingShose> LN_factory;shoes*pLNshoes = LN_factory.Create();if (pLNshoes){pLNshoes->show();delete pLNshoes;pLNshoes = NULL;}return 0;}

运行结果

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

更多推荐

设计模式--工厂类进阶

本文发布于:2023-07-28 19:54:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1293525.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:进阶   工厂   模式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!