知识卡片
工厂函数按运行时条件返回接口
内容
当具体该创建哪个类型要到运行时才能确定(比如根据用户传入的字符串”circle”或”square”)时,Go的做法是写一个工厂函数:它的返回值类型声明为接口(如Shaper),内部根据传入的参数决定具体构造哪个实现类型并返回,调用方完全不用关心也不需要知道背后到底是*Circle还发散:这是”把具体类型隐藏在接口返回值背后”的标准模式——工厂函数是少数几个必须知道所有具体类型的地方,。
参考来源
- 位置:《Go语言程序设计》第6章《面向对象编程》(源文件:_epub-src/OEBPS/text00040.html)
- 结论依据:原文在该章节围绕“当具体该创建哪个类型要到运行时才能确定(比如根据用户传入的字符串"circle"或"square")时,Go的…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:) (1层)以及 FilledImage() (2层)。 func DrawShapes(img draw.Image, x, y int, shapes ..Shaper) error { for _, shape := range shapes { if err := shape.Draw(img, x, y); err != nil…