新浪博客怎么做网站,中国万网域名注册价格,郑州网站改版,vue 企业网站模板【设计模式专题之工厂方法模式】2.积木工厂 题目描述 小明家有两个工厂#xff0c;一个用于生产圆形积木#xff0c;一个用于生产方形积木#xff0c;请你帮他设计一个积木工厂系统#xff0c;记录积木生产的信息。 输入描述 输入的第一行是一个整数 N#xff08;1 … 【设计模式专题之工厂方法模式】2.积木工厂 题目描述 小明家有两个工厂一个用于生产圆形积木一个用于生产方形积木请你帮他设计一个积木工厂系统记录积木生产的信息。 输入描述 输入的第一行是一个整数 N1 ≤ N ≤ 100表示生产的次数。 接下来的 N 行每行输入一个字符串和一个整数字符串表示积木的类型。积木类型分为 “Circle” 和 “Square” 两种。整数表示该积木生产的数量 输出描述 对于每个积木输出一行字符串表示该积木的信息。 输入示例 3 Circle 1 Square 2 Circle 1 输出示例 Circle Block Square Block Square Block Circle Block 提示信息 在示例中积木工厂生产了4块积木其中有2块是圆形积木2块是方形积木。 根据输入的类型每块积木的信息被输出到控制台。 思路
先声明接口 Block不同积木类型实现该接口圆形方形 积木实现上述Block接口提供的方法 produce实现一个积木生产工厂 BlockFactory用于生成不同形状的积木对象main函数中按要求批量生产对应积木
注意
字符串常量统一整理归类放在开头处BlockFactory考虑默认情况 default
Golang版本代码
package mainimport (fmt
)const (StrTypeCircle Circle // 类型圆形StrTypeSquare Square // 类型方形StrCircleBlock Circle Block // 输出圆形积木StrSquareBlock Square Block // 输出方形积木
)// Block 声明接口不同积木类型实现该接口
type Block interface {produce() string
}// CircleBlock
type CircleBlock struct {}// produce
func (b CircleBlock) produce() string { // 注意返回stirng类型return StrCircleBlock
}// SquareBlock
type SquareBlock struct{}// produce 实现square接口
func (b SquareBlock) produce() string {return StrSquareBlock
}// BlockFactory 积木生产工厂
func BlockFactory(blockType string) (Block, error) {switch blockType {case StrTypeCircle:return CircleBlock{}, nilcase StrTypeSquare:return SquareBlock{}, nildefault:return nil, fmt.Errorf(input blockType error)}
}func main() {// 输入生产次数n : 0if _, err : fmt.Scanf(%d, n); err ! nil {fmt.Printf(Scanf n: %v, input error\n, n)return}for i : 0; i n; i {// 输入积木类型和数量blockType, quantity : , 0if _, err : fmt.Scanf(%s %d, blockType, quantity); err ! nil {fmt.Printf(Scanf blockType: %v, quantity: %v, input error\n, blockType, quantity)return}block, err : BlockFactory(blockType)if err ! nil {fmt.Printf(BlockFactory blockType: %v, err: %v\n, blockType, err)return}for j : 0; j quantity; j {fmt.Println(block.produce())}}
}