8.编程实现一个工厂函数,该工厂函数能生产出计算三个多边形面积的函数(包括长方形、三角形、圆形),并从键盘输入三个多边形的数据加以验证用go语言
时间: 2024-12-18 18:28:11 浏览: 5
在 Go 语言中,你可以创建一个工厂函数来生成不同的多边形面积计算器函数。这里是一个简单的例子,展示了如何使用接口和结构体来实现这个功能:
首先,我们定义一个多边形接口 `PolygonAreaCalculator` 和一些具体的形状结构体,如 `Rectangle`, `Triangle`, 和 `Circle`,它们都实现了这个接口:
```go
package main
type PolygonAreaCalculator interface {
CalculateArea() float64
}
type Rectangle struct {
length float64
width float64
}
func (r Rectangle) CalculateArea() float64 {
return r.length * r.width
}
type Triangle struct {
base float64
height float64
}
func (t Triangle) CalculateArea() float64 {
return 0.5 * t.base * t.height
}
type Circle struct {
radius float64
}
func (c Circle) CalculateArea() float64 {
return math.Pi * c.radius * c.radius
}
```
接下来,我们可以编写一个工厂函数 `CreateAreaCalculator` 来根据用户输入创建合适的计算函数:
```go
import (
"fmt"
"math"
)
func CreateAreaCalculator(input string) PolygonAreaCalculator {
switch input {
case "rectangle":
dimensions := strings.Split(input, ",")
return Rectangle{length: parseFloat(dimensions[0]), width: parseFloat(dimensions[1])}
case "triangle":
dimensions := strings.Split(input, ",")
return Triangle{base: parseFloat(dimensions[0]), height: parseFloat(dimensions[1])}
case "circle":
radius := parseFloat(input)
return Circle{radius: radius}
default:
panic("Invalid shape type")
}
}
func parseFloat(s string) float64 {
num, err := strconv.ParseFloat(s, 64)
if err != nil {
panic(err)
}
return num
}
func main() {
fmt.Println("Enter a shape type (rectangle, triangle, circle): ")
var shapeInput string
fmt.Scanln(&shapeInput)
calculator := CreateAreaCalculator(shapeInput)
area := calculator.CalculateArea()
fmt.Printf("The area of the %s is %.2f\n", shapeInput, area)
// 用户输入验证部分
_, err := scanf("%d", &width); // 假设这里有一个读取宽度的函数,例如scanf
if err != nil {
fmt.Println("Invalid input, please provide correct dimensions.")
}
}
```
在这个示例中,用户通过命令行输入形状类型(如 `rectangle,10,20` 或 `triangle,5,7` 等),然后工厂函数会根据输入创建相应的面积计算函数。请注意,上述代码简化了用户输入验证的部分,实际应用中需要更详细的错误处理。
阅读全文