代码大全多态

尽量使用多态,避免大量的类型检查频繁重复出现的case语句有时是在暗示,采用继承可能是种更好的设计选择--尽管并不总是如此

 

 

 

在面向对象编程中,多态是一种允许你通过一个接口使用多种类型对象的方法。在你提供的例子中,使用 `switch` 或 `case` 语句来根据不同的形状类型调用不同的绘制方法,并不是最佳实践。相反,我们应该使用多态,让每个形状类实现一个共同的接口,并在其中定义一个 `Draw` 方法。

以下是如何使用 Go 语言来实现这个设计原则的示例:

```go
package main

import "fmt"

// Shaper 定义了形状的绘制接口
type Shaper interface {
    Draw()
}

// Circle 实现了 Shaper 接口
type Circle struct {
    // 可以包含圆特有的属性,比如半径
}

// Draw 实现了 Shaper 接口的 Draw 方法,用于绘制圆形
func (c *Circle) Draw() {
    fmt.Println("Drawing a circle.")
    // 这里添加绘制圆形的逻辑
}

// Square 实现了 Shaper 接口
type Square struct {
    // 可以包含正方形特有的属性,比如边长
}

// Draw 实现了 Shaper 接口的 Draw 方法,用于绘制正方形
func (s *Square) Draw() {
    fmt.Println("Drawing a square.")
    // 这里添加绘制正方形的逻辑
}

// drawShape 函数接受一个 Shaper 接口,根据实际类型调用相应的 Draw 方法
func drawShape(shape Shaper) {
    shape.Draw()
}

func main() {
    circle := Circle{}
    square := Square{}

    drawShape(&circle) // 输出: Drawing a circle.
    drawShape(&square) // 输出: Drawing a square.
}
```

在这个示例中:

- 我们定义了一个 `Shaper` 接口,其中包含一个 `Draw` 方法。
- `Circle` 和 `Square` 类型都实现了 `Shaper` 接口,因此它们都具有 `Draw` 方法。
- `drawShape` 函数接受一个 `Shaper` 接口参数,通过多态性,它可以调用任何实现了 `Shaper` 接口的类型的 `Draw` 方法。
- 在 `main` 函数中,我们创建了 `Circle` 和 `Square` 的实例,并使用 `drawShape` 函数来绘制它们,而不需要使用 `switch` 或 `case` 语句。

这种设计使得添加新的形状类型变得更简单,你只需要创建一个新的结构体并实现 `Shaper` 接口即可。这样做提高了代码的可扩展性和可维护性,并且遵循了开闭原则(对扩展开放,对修改封闭)。
  

  

posted @ 2024-08-01 09:56  易先讯  阅读(8)  评论(0编辑  收藏  举报