首页 > 编程语言 >C++ 简单设计模式之简单工厂

C++ 简单设计模式之简单工厂

时间:2022-08-31 11:22:07浏览次数:55  
标签:Phone int factory C++ phone PhoneFactory 简单 model 设计模式

一、简单工厂

一个工厂类能够根据传入参数而决定创建出哪一种产品类的实例

二、类设计

// 手机
class Phone {
public:
	virtual void model() = 0;
};

// 华为手机
class HuaWei : public Phone {
public:
	void model() {
		cout << "HuaWei" << endl;
	}
};

// 小米手机
class XiaoMi : public Phone {
public:
	void model() {
		cout << "XiaoMi" << endl;
	}
};

// 苹果手机
class Apple : public Phone {
public:
	void model() {
		cout << "Apple" << endl;
	}
};

// 生产手机的工厂
class PhoneFactory {
public:
	Phone* createPhone(int phone_type) {
		switch (phone_type)
		{
		case 0: m_phone = new HuaWei(); break;
		case 1: m_phone = new XiaoMi(); break;
		case 2: m_phone = new Apple();  break;

		default:
			m_phone = nullptr; break;
		}

		return m_phone;
	}
private:
	Phone *m_phone;
};

三、使用方式

int main(int argc, char *argv[])
{
	Phone *phone = nullptr;
	PhoneFactory *factory = new PhoneFactory();

	return 0;
}

1、生产产品

int main(int argc, char *argv[])
{
	Phone *phone = nullptr;
	PhoneFactory *factory = new PhoneFactory();

	// 生产华为手机
	phone = factory->createPhone(0);
	phone->model();

	delete phone;

	return 0;
}

2、生产产品

int main(int argc, char *argv[])
{
	Phone *phone = nullptr;
	PhoneFactory *factory = new PhoneFactory();

	// 生产小米手机
	phone = factory->createPhone(1);
	phone->model();

	delete phone;

	return 0;
}

3、生产产品

int main(int argc, char *argv[])
{
	Phone *phone = nullptr;
	PhoneFactory *factory = new PhoneFactory();

	// 生产苹果手机
	phone = factory->createPhone(2);
	phone->model();

	delete phone;

	return 0;
}

四、完整代码

#include <iostream>
using namespace std;

// 手机
class Phone {
public:
	virtual void model() = 0;
};

// 华为手机
class HuaWei : public Phone {
public:
	void model() {
		cout << "HuaWei" << endl;
	}
};

// 小米手机
class XiaoMi : public Phone {
public:
	void model() {
		cout << "XiaoMi" << endl;
	}
};

// 苹果手机
class Apple : public Phone {
public:
	void model() {
		cout << "Apple" << endl;
	}
};

// 生产手机的工厂
class PhoneFactory {
public:
	Phone* createPhone(int phone_type) {
		switch (phone_type)
		{
		case 0: m_phone = new HuaWei(); break;
		case 1: m_phone = new XiaoMi(); break;
		case 2: m_phone = new Apple();  break;

		default:
			m_phone = nullptr; break;
		}

		return m_phone;
	}
private:
	Phone *m_phone;
};


int main(int argc, char *argv[])
{
	Phone *phone = nullptr;
	PhoneFactory *factory = new PhoneFactory();

	// 生产华为手机
	phone = factory->createPhone(0);
	phone->model();
	delete phone;

	// 生产小米手机
	phone = factory->createPhone(1);
	phone->model();
	delete phone;

	// 生产苹果手机
	phone = factory->createPhone(2);
	phone->model();
	delete phone;

	return 0;
}

标签:Phone,int,factory,C++,phone,PhoneFactory,简单,model,设计模式
From: https://www.cnblogs.com/lvvou/p/16642356.html

相关文章

  • 侯捷老师c++11重点
    作者:还有offer嘛链接:https://www.nowcoder.com/discuss/962212?page=3来源:牛客网  •指针、引用、数组、内存•右值引用与完美转发•引用与指针区别•C和......
  • 【设计模式】25.行为型模式-解释器(Interpreter)
    一、描述给定一个语言,定义它的文法的一种标识,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式为自定义语言的设计和实现提供了一种解决方案,它用......
  • 反应变得简单!
    反应变得简单!如果您完全不知道对语言做出反应,那么阅读这篇文章可能是一个良好的开端,即使您一开始没有遵循,只要坚持到博客的最后一个,您就会得到它。这里还有一些关于React......
  • 2022 年 8 月前端更新:TypeScript、软件设计模式、焦点样式和单个 CSS 转换属性中的 SO
    2022年8月前端更新:TypeScript、软件设计模式、焦点样式和单个CSS转换属性中的SOLID原则本月我们将介绍TypeScript中的SOLID原则、React应用程序的软件设计模......
  • 南京地区寻志同道合的前端后端C++小伙伴(成功推荐奖励500元)
    我们是南京小微企业,目前虽处于疫情大环境下,但是我们公司由于强悍的技术背景以及所属行业特殊,处于项目多人少尴尬情况,作为公司合伙人,我们每天都很着急,经过长达半年的招聘,......
  • 简单的Css动画--涟漪效果
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"c......
  • 静态——字段与属性、方法与类、单例设计模式
    1、static关键字static关键字,用于修饰类,字段,属性,方法,构造方法等。被static修饰的类称之为“静态类”;被static修饰的成员称之为“静态成员”;被修饰过的成员分别称为:......
  • 从汇编看C++类的内存Layout(3)
    本文主要从汇编的角度,看C++类的内存模型,即C++类的各种数据是如何分布的。1.假设有如下Cpp文件:classMemoryLayout.cppclassBase{public:Base(){}......
  • C嵌入式编程设计模式-C语言类实现方式
    类的封装方式以文件作为封装边界,将外部调用的函数声明,全局变量变量放入头文件中,将具体实现放入.c文件中。简单栈的实现代码:/************************************......
  • c++ static修饰的函数作用与意义
    static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类:1.如果这个静态函数出现在类里,那么它是一个静态成员函数;静态成员函数的作用在于:调用这个函数不会访......