代码大全多态
尽量使用多态,避免大量的类型检查频繁重复出现的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` 接口即可。这样做提高了代码的可扩展性和可维护性,并且遵循了开闭原则(对扩展开放,对修改封闭)。
本文来自博客园,作者:易先讯,转载请注明原文链接:https://www.cnblogs.com/gongxianjin/p/18336047