使用简单工厂模式设计一个可以创建不同几何形状(如圆形,方形和三角形等)的绘图工具,每个几何元素都有绘制draw(),和擦除erase()两个函数,要求再绘制不支持的几何图形时提示一个UnSupportedShapeException.
时间: 2023-05-17 19:07:29 浏览: 124
好的,这是一个很好的编程问题。下面是一个简单工厂模式的实现,可以创建不同的几何形状:
```
class Shape {
public:
virtual void draw() = 0;
virtual void erase() = 0;
};
class Circle : public Shape {
public:
void draw() override {
// 绘制圆形
}
void erase() override {
// 擦除圆形
}
};
class Square : public Shape {
public:
void draw() override {
// 绘制正方形
}
void erase() override {
// 擦除正方形
}
};
class Triangle : public Shape {
public:
void draw() override {
// 绘制三角形
}
void erase() override {
// 擦除三角形
}
};
class ShapeFactory {
public:
static Shape* createShape(const std::string& shapeType) {
if (shapeType == "circle") {
return new Circle();
} else if (shapeType == "square") {
return new Square();
} else if (shapeType == "triangle") {
return new Triangle();
} else {
throw UnSupportedShapeException();
}
}
};
class UnSupportedShapeException : public std::exception {
public:
const char* what() const noexcept override {
return "Unsupported shape type";
}
};
```
在这个实现中,我们定义了一个抽象的 Shape 类,它有两个纯虚函数 draw() 和 erase(),分别用于绘制和擦除几何形状。然后我们定义了三个具体的几何形状类:Circle、Square 和 Triangle,它们都继承自 Shape 类,并实现了 draw() 和 erase() 函数。
接下来,我们定义了一个 ShapeFactory 类,它有一个静态函数 createShape(),根据传入的参数创建不同的几何形状对象。如果传入的参数不是支持的几何形状类型,就抛出一个 UnSupportedShapeException 异常。
这样,我们就可以使用简单工厂模式来创建不同的几何形状对象了。例如,要创建一个圆形对象,可以这样调用:
```
Shape* circle = ShapeFactory::createShape("circle");
```
如果要创建一个不支持的几何形状对象,比如矩形,就会抛出一个 UnSupportedShapeException 异常。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)