代码大全多态
尽量使用多态,避免大量的类型检查频繁重复出现的case语句有时是在暗示,采用继承可能是种更好的设计选择--尽管并不总是如此
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 在面向对象编程中,多态是一种允许你通过一个接口使用多种类型对象的方法。在你提供的例子中,使用 ` 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2023-08-01 使用 Fluent API 创建更简单、更直观的代码
2023-08-01 GO 编程模式:FUNCTIONAL OPTIONS
2023-08-01 Markdown Nice
2022-08-01 Kubeedge Edged概述