SRM

搏至无憾 鲨向巅峰

视觉组第五次培训作业

视觉组第五次培训作业

Design Patterns & Git & CMake & Shell


Design Patterns

PS:控制组同学此部分内容用第三次作业代码替代即可

题目名称:多样化产品加工工厂

题目描述:

在一个生产系统中,需要根据不同的产品类型,采用不同的加工策略来处理产品。每种产品只能由一个特定的加工工厂生产。

要求你使用C++编写代码,模拟以下场景:

  • 有三种产品类型:ProductA、ProductB 和 ProductC。
  • 对于每种产品,有不同的加工策略。例如,ProductA 的加工策略是“加热”,ProductB 的加工策略是“冷却”,ProductC 的加工策略是“混合”。
  • 使用工厂模式来创建不同的产品。
  • 使用策略模式来定义产品的加工方式,并允许动态更换加工策略。
  • 使用策略工厂模式来创建加工策略,以便可以根据需求动态生成不同的加工策略。
  • 使用单例模式实现工厂管理者,确保系统中只有一个工厂管理者负责协调产品的生产和加工策略的分配。

要求:

  1. 定义抽象的产品类和具体的产品子类(ProductA、ProductB 和 ProductC)。
  2. 定义抽象的加工策略接口,并为每种加工方式实现具体的策略类(如加热策略、冷却策略、混合策略)。
  3. 实现一个策略工厂类,用于根据策略类型创建相应的加工策略。
  4. 实现一个工厂管理者类,使用单例模式确保该类在系统中只有一个实例,负责创建产品和分配加工策略。
  5. 实现一个工厂类,用于根据产品类型创建产品对象。
  6. 提供一个主函数模拟工厂管理者的工作流程,包括生产不同类型的产品、动态分配和更换加工策略,并执行产品的加工流程。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int main() {
FactoryManager& manager = FactoryManager::getInstance();

// 创建产品A并指定加热策略
std::unique_ptr<Product> productA = manager.createProduct("ProductA");
if (productA) {
manager.assignStrategy(productA.get(), "Heating");
productA->process();
}

// 创建产品B并指定冷却策略
std::unique_ptr<Product> productB = manager.createProduct("ProductB");
if (productB) {
manager.assignStrategy(productB.get(), "Cooling");
productB->process();
}

// 创建产品C并指定混合策略
std::unique_ptr<Product> productC = manager.createProduct("ProductC");
if (productC) {
manager.assignStrategy(productC.get(), "Mixing");
productC->process();
}

return 0;
}

提示:

  • 工厂模式用于创建不同的产品对象。
  • 策略模式用于定义产品的加工方式,并允许动态替换策略。
  • 策略工厂模式用于集中管理和创建不同的加工策略。
  • 单例模式用于创建唯一的工厂管理者实例,负责整个生产系统的协调工作。

Git

此次作业用git配合github进行管理(需提交github仓库地址)


CMake

多文件编写Design Patterns部分的作业内容,并使用CMake对其进行构建编译


Shell

编写一个在linux下的自动编译并运行的.sh脚本


作业提交

将文件打包压缩为姓名-组别-0730.zip,以邮件形式发送至linzitao1379@gmail.com

作业文件结构:

Project/
├── Factory/
│ ├── Factory.h
│ ├── Factory.cpp
│ ├── main.cpp
│ └── CMakeLists.txt
├── githubsite.txt(github仓库地址)
└── run.sh(shell脚本)

ddl:8.5 24:00