首页 > 其他分享 >简单工厂模式与工厂模式

简单工厂模式与工厂模式

时间:2024-08-13 22:18:19浏览次数:10  
标签:积木 模式 工厂 抽象 产品 简单 public Block

简单工厂模式的核心思想 是将产品的创建过程封装在一个工厂类中,把创建对象的流程集中在这个工厂类里面。

简单工厂模式包括三个主要角色,工厂类,抽象产品,具体产品。

抽象产品:描述产品的通用行为。

具体产品:实现抽象产品接口或者继承抽象产品类

工厂类:负责创建产品,根据传递的不同参数创建不同的产品示例。

由于简单工厂模式只有一个工厂类,负责创建所有产品,如果要添加新的产品,通常需要修改工厂类的代码。

工厂方法模式引入抽象工厂和具体工厂的概念,每个具体工厂只负责创建一个具体的产品,添加新的产品只需要添加新的工厂类而无需修改原来的代码,这样就使得产品的生产更加灵活,支持扩展,符合开闭原则。

工厂方法模式分为以下几个角色 :

抽象工厂:一个接口,包含一个抽象的工厂方法(用于创建产品对象)。

具体工厂:实现抽象工厂接口,创建具体的产品。

抽象产品:定义产品的接口。

具体产品:实现抽象产品接口,是工厂创建的对象。

demo程序:

#include <iostream>
#include <vector>

// 抽象积木接口
class Block {
public:
virtual void produce() = 0;
};

// 具体圆形积木实现
class CircleBlock : public Block {
public:
void produce() override {
std::cout << "Circle Block" << std::endl;
}
};

// 具体方形积木实现
class SquareBlock : public Block {
public:
void produce() override {
std::cout << "Square Block" << std::endl;
}
};

// 抽象积木工厂接口
class BlockFactory {
public:
virtual Block* createBlock() = 0;
};

// 具体圆形积木工厂实现
class CircleBlockFactory : public BlockFactory {
public:
Block* createBlock() override {
return new CircleBlock();
}
};

// 具体方形积木工厂实现
class SquareBlockFactory : public BlockFactory {
public:
Block* createBlock() override {
return new SquareBlock();
}
};

// 积木工厂系统
class BlockFactorySystem {
private:
std::vector<Block*> blocks;

public:
void produceBlocks(BlockFactory* factory, int quantity) {
for (int i = 0; i < quantity; i++) {
Block* block = factory->createBlock();
blocks.push_back(block);
block->produce();
}
}

const std::vector<Block*>& getBlocks() const {
return blocks;
}

~BlockFactorySystem() {
// 释放所有动态分配的积木对象
for (Block* block : blocks) {
delete block;
}
}
};

int main() {
// 创建积木工厂系统
BlockFactorySystem factorySystem;

// 读取生产次数
int productionCount;
std::cin >> productionCount;

// 读取每次生产的积木类型和数量
for (int i = 0; i < productionCount; i++) {
std::string blockType;
int quantity;
std::cin >> blockType >> quantity;

if (blockType == "Circle") {
factorySystem.produceBlocks(new CircleBlockFactory(), quantity);
} else if (blockType == "Square") {
factorySystem.produceBlocks(new SquareBlockFactory(), quantity);
}
}

return 0;
}

标签:积木,模式,工厂,抽象,产品,简单,public,Block
From: https://www.cnblogs.com/huwy-123/p/18357804

相关文章

  • 解密Java中介者模式:代码实例带你深入理解
    1.引言:中介者模式的重要性在软件设计的世界里,模块间的相互依赖往往会导致系统的复杂性和维护难度的增加。中介者模式(MediatorPattern)作为一种行为设计模式,它的出现就是为了解决这一问题。通过引入一个中介者对象,它能够协调各个模块之间的通信,从而实现模块间的解耦,提高系......
  • 一个基于 Java 接口参数加密框架,让接口参数加密变得简单、优雅!
    SecurityApiv1.0.1一个基于Java接口参数加密框架,让接口参数加密变得简单、优雅!文章目录一、SecurityApi介绍二、SecurityApi依赖三、使用1.RSA加密(非对称加密)1.1简单示例1.2生成RSA密钥1.3加签名说明「第一个场景」B要给A传递一条加密消息「第二个场景」B......
  • Thinkphp8 通过中间件 和 属性 简单实现AOP
    转载请著名来源,侵权必究//属性接口declare(strict_types=1);namespaceapp\common\attribute;interfaceAttributeHandler{publicfunctionhandler(mixed$handler);}//不需要登陆属性declare(strict_types=1);namespaceapp\common\attribute;/***跳......
  • 【软件设计模式】策略模式详解
    策略模式策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换。策略模式让算法的变化独立于使用算法的客户。组成策略接口(Strategy):定义了一个所有具体策略的通用接口,各种不同的策略都遵循这个接口,它声明了一个上下文用于执行策略的方法......
  • 【软件设计模式】 观察者模式详解
    观察者模式观察者模式是一种行为设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式特别适合于实现分布式系统中的事件处理系统,以及在需要在应用中实现广播通信时使用。组成发布者(Subject)会......
  • [全文]买椟还珠和坏事变好事?《分析模式》漫谈19
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集“AnalysisPatterns”的第一章有这么一句:Modelinginaprogramminglanguagealsopresentsthe danger oftyingthemodelstothatlanguage.Themodelmayusefeaturesoft......
  • 海外市场风向标:Shein全面发力半托管模式
    Shein,一个迅速崛起的全球在线时尚零售平台,以其快速的时尚反应和亲民的价格,赢得了全球消费者的青睐。自2023年起,SHEIN致力于加强其平台架构,通过提供全面的平台代运营服务、商家自我管理的运营方式和半托管模式,来满足多样化的跨境销售需求。这些模式旨在为各类跨境商家提供合适的......
  • 【原创】java+swing+mysql简单图书信息管理系统设计与实现
    个人主页:程序员杨工个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战开发背景:编程小白们刚入门,尤其在学了一点java的基础之后,想通过自己动手来实现一个比较基础的小项目,由于编程经验......
  • 创建型模式--单例模式
    饿汉模式提前创建好了//饿汉式publicclassSingleton{privatestaticfinalSingletoninstance=newSingleton();privateSingleton(){//私有构造方法,防止外部实例化}publicstaticSingletongetInstance(){returnins......
  • Springboot+Vue 搭建简单的学生信息管理系统(附源码)
    前言        本博客旨用最基础的知识来开发一个最简单的学生信息管理系统。通过使用Springboot+Vue+Mybatis-plus+axios技术,能帮助大家更好的了解前后端分离的大致流程和框架。文章末尾附有源码和启动项目的想法,赶时间的同学可以直接下载源码进行学习一、技术栈1.......