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

设计模式——工厂模式

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

★★★原文链接★★★:https://subingwen.cn/design-patterns/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;
	}
};

// 定义工厂类 - 抽象父类
class AbstractFactory {
public:
	virtual AbstractSmile* createSmile() = 0;
	virtual ~AbstractFactory(){}
};

// 生产SheepSmile
class SheepFactory :public AbstractFactory
{
public:
	AbstractSmile* createSmile() {
		return new SheepSmile;
	}
	~SheepFactory() {
		cout << "SheepFactory 析构函数调用" << endl;
	}
};

// 生产LionSmile
class LionFactory :public AbstractFactory
{
public:
	AbstractSmile* createSmile() {
		return new LionSmile;
	}
	~LionFactory() {
		cout << "LionFactory 析构函数调用" << endl;
	}
};

// 生产BatSmile
class BatFactory :public AbstractFactory
{
public:
	AbstractSmile* createSmile() {
		return new BatSmile;
	}
	~BatFactory() {
		cout << "BatFactory 析构函数调用" << endl;
	}
};
int main() {
	// 创建工厂类对象
	AbstractFactory* factory = new LionFactory;
	AbstractSmile* obj = factory->createSmile();
	obj->transform();
	obj->ability();
	
	delete factory;
	delete obj;

	return 0;
}

res:

  

 

工厂模式的“工厂”:

1. 一个基类,包含一个虚工厂函数,用于实现多态。

2. 多个子类,重写父类的工厂函数。

★★★原文链接★★★:https://subingwen.cn/design-patterns/factory/

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

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

相关文章

  • 设计模式——简单工厂模式
    简单工厂模式详细介绍请见:★★★原文链接★★★:https://subingwen.cn/design-patterns/simple-factory/对于简单工厂模式,工厂类有且仅有一个 简单工厂模式示例:#include<iostream>usingnamespacestd;//产品类的父类-人造恶魔果实父类classAbstractSmile{pub......
  • 【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)特点:       服务器进程与客户进......