请你使用c++设计模式,多态的用法,把类分开,有主文件的代码做一个动态玫瑰花
时间: 2024-11-20 15:43:30 浏览: 9
在C++中,我们可以利用单例模式和工厂模式相结合的方式来设计一个多态的动态玫瑰花系统。这里我会提供一个简化版的示例,包括主文件和相关的类。
首先,我们创建一个`RoseFactory`单例工厂类,它负责创建不同类型的玫瑰:
```cpp
// RoseFactory.h
#ifndef ROSEFACTORY_H
#define ROSEFACTORY_H
class RoseFactory {
public:
static std::unique_ptr<Rose> createRose(const std::string& type);
private:
static std::unique_ptr<RoseFactory> instance;
RoseFactory() = default;
~RoseFactory() = delete;
RoseFactory(const RoseFactory&) = delete;
RoseFactory& operator=(const RoseFactory&) = delete;
};
#endif // ROSEFACTORY_H
```
然后,我们创建一个抽象基类`Rose`:
```cpp
// Rose.h
#include <memory>
class Rose {
public:
virtual ~Rose() {}
virtual void show() const = 0;
};
// 具体实现:例如红玫瑰RedRose和黄玫瑰YellowRose
class RedRose : public Rose {
public:
void show() const override { cout << "This is a beautiful red rose." << endl; }
};
class YellowRose : public Rose {
public:
void show() const override { cout << "This is a bright yellow rose." << endl; }
};
```
最后,在主文件`main.cpp`中,我们通过`RoseFactory`获取并展示不同类型的玫瑰:
```cpp
// main.cpp
#include "RoseFactory.h"
#include <iostream>
int main() {
// 获取玫瑰工厂实例
auto factory = RoseFactory::instance;
// 创建并显示红玫瑰
std::unique_ptr<Rose> redRose = factory->createRose("red");
redRose->show();
// 创建并显示黄玫瑰
std::unique_ptr<Rose> yellowRose = factory->createRose("yellow");
yellowRose->show();
return 0;
}
```
在这个例子中,用户不需要关心具体的玫瑰类型是如何创建的,只需要通过`RoseFactory`得到`Rose`的对象,并调用`show()`方法即可,这就是多态的应用。
阅读全文