简单工厂模式(C++实现)

(本博客旨在个人总结回顾)

目录

1、详情:

2、应用:

3、UML类图:

4、代码实现:


1、详情:

简单工厂模式(静态工厂方法模式)并不属于Gof中的23设计模式之一。

简单工厂模式包含三个角色:

①工厂类角色:这是本模式的核心,含有一定的判断逻辑,根据逻辑不同产生具体的工厂产品。例子中的:MyAlgorithmFactory

②抽象产品类角色:一般为具体产品继承的父类或者实现的接口。例子中的:MyAlgorithm

 ③具体产品类角色:继承或实现抽象产品类角色,工厂类创建的是此角色的实例。例子中的:MyAdd,MySub,MyMul

2、应用:

简单工厂模式适用于业务较简单的情况,一般用于小项目或者具体产品很少扩展的情况。(扩展产品需要修改工厂类,违反开闭原则)

3、UML类图:

4、代码实现:

MyAlgorithm.h

#pragma once
//算法接口类
class MyAlgorithm
{
public:
    MyAlgorithm();
    ~MyAlgorithm();

public:
    virtual double GetResult(double param1, double param2) = 0;
};

MyAlgorithm.cpp

#include "stdafx.h"
#include "MyAlgorithm.h"


MyAlgorithm::MyAlgorithm()
{
}


MyAlgorithm::~MyAlgorithm()
{
}

MyAdd.h

#pragma once
#include "MyAlgorithm.h"
class MyAdd:public MyAlgorithm
{
public:
    MyAdd();
    ~MyAdd();

public:
    double GetResult(double param1, double param2);
};

MyAdd.cpp

#include "stdafx.h"
#include "MyAdd.h"

MyAdd::MyAdd()
{
}


MyAdd::~MyAdd()
{
}

double MyAdd::GetResult(double param1, double param2)
{
    return param1 + param2;
}

MySub.h

#pragma once
#include "MyAlgorithm.h"
class MySub:public MyAlgorithm
{
public:
    MySub();
    ~MySub();

public:
    double GetResult(double param1, double param2);
};

MySub.cpp

#include "stdafx.h"
#include "MySub.h"


MySub::MySub()
{
}


MySub::~MySub()
{
}

double MySub::GetResult(double param1, double param2)
{
    return param1 - param2;
}

MyMul.h

#pragma once
#include "MyAlgorithm.h"
class MyMul:public MyAlgorithm
{
public:
    MyMul();
    ~MyMul();

public:
    double GetResult(double param1, double param2);
};

MyMul.cpp

#include "stdafx.h"
#include "MyMul.h"


MyMul::MyMul()
{
}


MyMul::~MyMul()
{
}

double MyMul::GetResult(double param1, double param2)
{
    return param1 * param2;
}

MyAlgorithmFactory.h

#pragma once
#include "MyAlgorithm.h"
#include "MyAdd.h"
#include "MySub.h"
#include "MyMul.h"

class MyAlgorithmFactory
{
public:
    MyAlgorithmFactory();
    ~MyAlgorithmFactory();

public:
    static MyAlgorithm* GetAlgorithm(char cType);
};

MyAlgorithmFactory.cpp

#include "stdafx.h"
#include "MyAlgorithmFactory.h"


MyAlgorithmFactory::MyAlgorithmFactory()
{
}


MyAlgorithmFactory::~MyAlgorithmFactory()
{
}

MyAlgorithm* MyAlgorithmFactory::GetAlgorithm(char cType)
{
    switch (cType)
    {
    case '+':
        return new MyAdd();
        break;

    case '-':
        return new MySub();
        break;

    case '*':
        return new MyMul();
        break;

    default:
        break;
    }
}

调用代码:

// FactoryMethodMemo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "MyAlgorithm.h"
#include "MyAlgorithmFactory.h"

#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    MyAlgorithm* pAlgorithmm = NULL;
    pAlgorithmm = MyAlgorithmFactory::GetAlgorithm('+');
    cout << "add:" << pAlgorithmm->GetResult(3.0, 5.0) << endl;
    delete pAlgorithmm;
    pAlgorithmm = NULL;
    
    pAlgorithmm = MyAlgorithmFactory::GetAlgorithm('-');
    cout << "sub:" << pAlgorithmm->GetResult(3.0, 5.0) << endl;
    delete pAlgorithmm;
    pAlgorithmm = NULL;

    pAlgorithmm = MyAlgorithmFactory::GetAlgorithm('*');
    cout << "mul:" << pAlgorithmm->GetResult(3.0, 5.0) << endl;
    delete pAlgorithmm;
    pAlgorithmm = NULL;

    system("pause");
	return 0;
}

输出结果:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值