工厂方法模式(Factory Method Pattern) 是一种创建对象的设计模式。它属于创建型模式,定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中进行。
例如,假设我们有一个汽车生产工厂的抽象概念。这个抽象工厂有一个生产汽车的方法(工厂方法),但是具体生产哪种汽车(轿车、SUV 或者跑车)由具体的工厂子类来决定。
https://kamacoder.com/problempage.php?pid=1076
package main
import (
"fmt"
)
// 积木接口
type IBuildBlock interface {
Produce()
}
// 圆形积木
type CircleBlock struct{}
func (c *CircleBlock) Produce() {
fmt.Println("Circle Block")
}
// 方形积木
type SquareBlock struct{}
func (s *SquareBlock) Produce() {
fmt.Println("Square Block")
}
// 工厂接口
type IBlockFactory interface {
ProduceWood() IBuildBlock
}
// 圆形积木工厂
type CircelBlockFactory struct{}
func (c *CircelBlockFactory) ProduceWood() IBuildBlock {
return &CircleBlock{}
}
// 方形积木工厂
type SquareBlockFactory struct{}
func (s *SquareBlockFactory) ProduceWood() IBuildBlock {
return &SquareBlock{}
}
type BlockFactory struct {
}
func (b *BlockFactory) ProduceBlockWood(factory IBlockFactory, count int) {
for count > 0 {
var block = factory.ProduceWood()
block.Produce()
count--
}
}
func main() {
var factory = &BlockFactory{}
var n int
fmt.Scan(&n)
for n > 0 {
var str string
var count int
fmt.Scan(&str, &count)
if str == "Circle" {
factory.ProduceBlockWood(&CircelBlockFactory{}, count)
} else {
factory.ProduceBlockWood(&SquareBlockFactory{}, count)
}
n--
}
}