设计模式练习(二) 简单工厂模式

设计模式练习(二) 简单工厂模式

题目描述

小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。

输入描述

输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。

接下来的 N 行,每行输入一个字符串和一个整数,字符串表示积木的类型。积木类型分为 "Circle" 和 "Square" 两种。整数表示该积木生产的数量

输出描述

对于每个积木,输出一行字符串表示该积木的信息。

输入示例
复制代码
3
Circle 1
Square 2
Circle 1
输出示例
复制代码
Circle Block
Square Block
Square Block
Circle Block

code:

cc 复制代码
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <memory>
 
using namespace std;
 
class Block
{
public:
    virtual ~Block() {}
    virtual std::string GetBlockInfo() const = 0;
};
 
class CircleBlock : public Block
{
public:
    std::string GetBlockInfo() const override
    {
        return "Circle Block";
    }
};
 
class SquareBlock : public Block
{
public:
    std::string GetBlockInfo() const override
    {
        return "Square Block";
    }
};
 
class BlockFactory
{
public:
    static std::unique_ptr<Block> CreateBlock(const std::string &type)
    {
        if (type == "Circle")
        {
            return std::make_unique<CircleBlock>();
        }
        else if (type == "Square")
        {
            return std::make_unique<SquareBlock>();
        }
        return nullptr;
    }
};
 
int main()
{
    int N;
    std::cin >> N;
    for (int i = 0; i < N; ++i)
    {
        std::string type;
        int quantity;
        std::cin >> type >> quantity;
 
        for (int j = 0; j < quantity; ++j)
        {
            std::unique_ptr<Block> block = BlockFactory::CreateBlock(type);
            if (block)
            {
                std::cout << block->GetBlockInfo() << std::endl;
            }
        }
    }
    return 0;
}

工程模式是创建模式

可以看到积木是不变的,为一个接口;其变化的是方形积木和圆形积木,是积木接口的具体实现

开闭原则:对扩展开放,修改关闭;不修改已有代码,灵活地增加新的产品类

相关推荐
君义_noip8 分钟前
信息学奥赛一本通 1615:【例 1】序列的第 k 个数
c++·算法·信息学奥赛·csp-s
AA陈超16 分钟前
虚幻引擎5 GAS开发俯视角RPG游戏 P07-19.发送鼠标光标数据
c++·笔记·学习·游戏·ue5·虚幻引擎
玖剹30 分钟前
哈希表相关题目
数据结构·c++·算法·leetcode·哈希算法·散列表
暗然而日章1 小时前
C++基础:Stanford CS106L学习笔记 14 类型安全 & `std::optional`
c++·笔记·学习
L_09071 小时前
【C++】高阶数据结构 -- 二叉搜索树(BST)
数据结构·c++
大筒木老辈子1 小时前
C++笔记---并发支持库(future)
java·c++·笔记
PyGata1 小时前
CMake学习笔记(二):CMake拷贝文件夹
c++·笔记·学习
仰泳的熊猫1 小时前
1150 Travelling Salesman Problem
数据结构·c++·算法·pat考试
智者知已应修善业2 小时前
【蓝桥杯龟兔赛跑】2024-2-12
c语言·c++·经验分享·笔记·算法·职场和发展·蓝桥杯
雨中飘荡的记忆2 小时前
享元模式深度解析:看Java如何优雅节省内存
java·设计模式