设计模式练习(二) 简单工厂模式
题目描述
小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。
输入描述
输入的第一行是一个整数 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;
}
工程模式是创建模式
可以看到积木是不变的,为一个接口;其变化的是方形积木和圆形积木,是积木接口的具体实现
开闭原则:对扩展开放,修改关闭;不修改已有代码,灵活地增加新的产品类