设计模式C++实现_2_简单工厂模式

简单工厂模式


主要用于创建对象。 新添加类时, 不会影响以前的系统代码。 核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的 virtual 函数得到不同的结果.


下面以苹果手机的生产为例,模拟手机生产工厂。

苹果手机有各种不同的型号,有Iphone4、Iphone4s、Iphone5等等。

我们通过一个工厂来生产,客户端根据客户的需求生产不同型号的手机。

代码如下:

Apple.h

#pragma once
#include <iostream>

class Apple
{
public:
	Apple();
	virtual ~Apple();

	virtual void ShowVersion() = 0;
	virtual void MakeCall(const std::string &num) = 0;
};

Apple.cpp

#include "Apple.h"

Apple::Apple()
{
}

Apple::~Apple()
{
}

Apple4.h

#pragma once
#include "Apple.h"

class Apple4 : public Apple
{
public:
	Apple4();
	~Apple4();

	virtual void ShowVersion();
	virtual void MakeCall(const std::string &num);
};

Apple4.cpp

#include "Apple4.h"
#include <iostream>
#include <string>

using namespace std;

Apple4::Apple4()
{
	cout << "Apple4 Created!" << endl;
}

Apple4::~Apple4()
{
};

void Apple4::ShowVersion()
{
	cout << "I'm Apple4" << endl;
}

void Apple4::MakeCall(const std::string &num)
{
	cout << "I'm Call num :" << num << endl;
}

Apple4s.h

#pragma once
#include "Apple.h"

class Apple4s : public Apple
{
public:
	Apple4s();
	~Apple4s();

	virtual void ShowVersion();
	virtual void MakeCall(const std::string &num);
};

Apple4s.cpp

#include "Apple4s.h"
#include <iostream>
#include <string>

using namespace std;

Apple4s::Apple4s()
{
	cout << "Apple4s Created!" << endl;
}

Apple4s::~Apple4s()
{
};

void Apple4s::ShowVersion()
{
	cout << "I'm Apple4s" << endl;
}

void Apple4s::MakeCall(const std::string &num)
{
	cout << "I'm Call num :" << num << endl;
}

AppleFactory.h

#pragma once 
#include "Apple.h"
#include <string>

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

	static Apple * MakePhone(const std::string &version);//声明为静态成员函数

};

AppleFactory.cpp

#include "AppleFactory.h"
#include "Apple4.h"
#include "Apple4s.h"
#include <iostream>
#include <string>

AppleFactory::AppleFactory()
{
}

AppleFactory::~AppleFactory()
{
}

Apple * AppleFactory::MakePhone(const std::string &version)
{
	if(version == "Apple4")
	{
		return new Apple4();
	}
	if(version == "Apple4s")
	{
		return new Apple4s();
	}
	return NULL;
}

main.cpp
#include "AppleFactory.h"
#include <iostream>

int main()
{
	Apple * A4 = AppleFactory::MakePhone("Apple4");
	A4->ShowVersion();
	A4->MakeCall("10086");

	std::cout << "------------------" << std::endl;

	Apple * A4s = AppleFactory::MakePhone("Apple4s");
	A4s->ShowVersion();
	A4s->MakeCall("10010");
	
	return 0;
}

/*
运行结果:

Apple4 Created!
I'm Apple4
I'm Call num :10086
------------------
Apple4s Created!
I'm Apple4s
I'm Call num :10010
请按任意键继续. . .
*/

这个模式也叫静态工厂模式,因为依赖的是工厂类中的静态方法。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值