首页 > 其他分享 >设计模式——简单工厂模式

设计模式——简单工厂模式

时间:2023-08-27 22:03:33浏览次数:35  
标签:设计模式 子类 transform 模式 工厂 AbstractSmile virtual 父类

简单工厂模式

详细介绍请见:★★★原文链接★★★:https://subingwen.cn/design-patterns/simple-factory/

  • 对于简单工厂模式,工厂类 有且仅有一个

 

简单工厂模式 示例:

#include <iostream>
using namespace std;

// 产品类的父类 - 人造恶魔果实父类
class AbstractSmile {
public:
	virtual void transform() = 0;
	virtual void ability() = 0;
	virtual ~AbstractSmile() {}	// 虚析构函数
};
// 1
class SheepSmile :public AbstractSmile
{
public:
	void transform() override {	// override检查子类重写的虚函数的名字和父类的是否相同(相同是正确的)
		cout << "SheepSmile transform" << endl;
	}
	void ability() override {
		cout << "SheepSmile ability" << endl;
	}
};
// 2
class LionSmile :public AbstractSmile
{
public:
	void transform() override {	// override检查子类重写的虚函数的名字和父类的是否相同(相同是正确的)
		cout << "LionSmile transform" << endl;
	}
	void ability() override {
		cout << "LionSmile ability" << endl;
	}
};
// 3
class BatSmile :public AbstractSmile
{
public:
	void transform() override {	// override检查子类重写的虚函数的名字和父类的是否相同(相同是正确的)
		cout << "BatSmile transform" << endl;
	}
	void ability() override {
		cout << "BatSmile ability" << endl;
	}
};

// 定义强枚举类型
enum class Type :char { Sheep, Lion, Bat };

// 定义工厂类
class SmileFactory {
public:
	// 把工厂函数的返回值设置成 父类指针类型,返回一个指向子类对象的父类指针(实现了多态)
	AbstractSmile* createSmile(Type type) {
		AbstractSmile* ptr = nullptr;
		switch (type)
		{
		case Type::Sheep:
			ptr = new SheepSmile;
			break;
		case Type::Lion:
			ptr = new LionSmile;
			break;
		case Type::Bat:
			ptr = new BatSmile;
			break;
		default:
			break;
		}

		return ptr;
	}
};
int main() {
	// 创建工厂类对象
	SmileFactory* factory = new SmileFactory;
	AbstractSmile* obj = factory->createSmile(Type::Lion);
	obj->transform();
	obj->ability();

	return 0;
}

res:

  

 

多态需要满足的3个条件:

1. 类和类之间有继承关系

2. 父类中有虚函数,并且在子类中重写虚函数

3. 使用父类指针或引用指向子类对象

 

详细介绍请见:★★★原文链接★★★:https://subingwen.cn/design-patterns/simple-factory/

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

标签:设计模式,子类,transform,模式,工厂,AbstractSmile,virtual,父类
From: https://www.cnblogs.com/wjjgame/p/17658359.html

相关文章

  • 【23种设计模式】工厂方法模式(二)
    ****##前言在讲述之工厂方法模式前,我们来先了解简单工厂模式,简单工厂模式是最简单的设计模式之一,它虽然不属于GoF的23种设计模式,但是应用也较为频繁,同时它也是学习其他创建型模式的基础。下面我们来先了解下简单工厂模式,然后针对它的缺点来引出工厂方法模式。简单工厂方法定义......
  • 19 迭代器模式 -- go语言设计模式
    迭代器模式是一种行为型设计模式,它允许我们在不暴露聚合对象内部结构的情况下,遍历其中的元素。在这种模式下,我们使用迭代器对象来遍历聚合对象中的元素。迭代器模式的实现代码packagemainimport("fmt")//定义一个迭代器接口typeIteratorinterface{HasNext......
  • 单例模式
    什么是单例模式单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。 单例模式和静态类的区别首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态......
  • [一只菜鸟的做题记录]攻防世界_1(新手模式)
    一只网络安全菜鸟--(˙<>˙)/--写博客主要是想记录一下自己的学习过程,过两年毕业了也能回头看看自己都学了些啥东西。由于本人水平有限内容难免有错误、疏漏、逻辑不清、让人看不懂等各种问题,恳请大家批评指正如果我写的东西能对你有一点点帮助,那真是再好不过了......
  • python代码模拟一个工厂的库存管理软件
    下面是一个简单的工厂库存管理软件的Python代码示例:importjson#初始化库存数据inventory={"products":[{"id":1,"name":"Product1","quantity":10},{"id":2,"name":"Product2"......
  • 开发模式:ASP.NET MVC4
    1)新建ASP.NETMVC4网站项目;2)引用前面的Data和Service工程项目;3)向网站项目添加install-packageautofac.mvc4install-packageautomapper-version4.1.14)新建ViewModels、Mappings两个文件夹;5)生成必要的ViewModels;6)向Mappings中复制文件:AutoMapperConfiguration.cs......
  • 设计模式学习笔记——接口隔离原则
    定义:1、客户端不应该依赖于它不需要的接口2、类间的依赖关系应该建立在最小的接口上通俗的讲,应该建立单一的接口,不要建立臃肿庞大的接口,即接口应该尽量细化,同时接口中的方法尽量少。举例:要成为一名美女必须具备三个条件:面貌、身材、气质,星探找美女的过程如下类图所示:IPrettyGirl接......
  • 设计模式学习笔记——创建者模式
    这个模式也是比较难理解的,我看了《设计模式之禅》上讲解的例子,但是看完之后一头雾水,而且好乱,仍然没有理解,看了好几遍,还是没有理解,于是我又去翻开我的课本,看那上面的例子,但是结果依然。于是上网搜,搜了很多,但是都不是很理想,最终功夫不负有心人,终于找到一个我能理解,而且我认为比较合理......
  • oracle学习笔记(12)——数据库服务器工作模式与数据字典
    1、 专用服务器工作模式    1)概念:       专用服务器模式是指Oracle为每个用户进程启动一个专门的服务器进程,该服务器进程仅为该用户进程提供服务,直到用户进程断开连接时,对应的服务器进程才终止。    2)特点:       服务器进程与客户进......
  • 开发模式:创建数据层、服务层
    数据层1)创建Project.Data类库;2)新建项目ADO.NET实体数据模型,从数据库生成;3)向项目添加Infrastructure文件夹,复制Infrastructure文件,修改引用域;4)生成RepositoryBase.cs文件;5)向项目添加Repositories文件夹,生成Repositories文件,复制到Repositories文件夹; 服务层1)创建Project.S......