69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package main
|
|
|
|
/*
|
|
实例
|
|
小汤有一家披萨店,他想通过工厂方法模式来创建不同类型的披萨。
|
|
首先,他定义了一个披萨接口和具体的披萨类,然后创建了一个披萨工厂接口和具体的披萨工厂类来生产不同类型的披萨。
|
|
*/
|
|
|
|
import "fmt"
|
|
|
|
// 披萨接口
|
|
type Pizza interface {
|
|
show()
|
|
}
|
|
|
|
// 披萨工厂接口
|
|
type PizzaFactory interface {
|
|
createPizza() Pizza
|
|
}
|
|
|
|
// 具体的披萨类
|
|
type CheesePizza struct{}
|
|
|
|
func (p *CheesePizza) show() {
|
|
fmt.Println(" 这是个芝士披萨!")
|
|
fmt.Println()
|
|
}
|
|
|
|
type PepperoniPizza struct{}
|
|
|
|
func (p *PepperoniPizza) show() {
|
|
fmt.Println(" 这是个意大利辣香肠披萨!")
|
|
fmt.Println()
|
|
}
|
|
|
|
// 具体的披萨工厂类
|
|
type CheesePizzaFactory struct{}
|
|
|
|
func (f *CheesePizzaFactory) createPizza() Pizza {
|
|
return &CheesePizza{}
|
|
}
|
|
|
|
type PepperoniPizzaFactory struct{}
|
|
|
|
func (f *PepperoniPizzaFactory) createPizza() Pizza {
|
|
return &PepperoniPizza{}
|
|
}
|
|
|
|
func main() {
|
|
var factory PizzaFactory
|
|
var pizza Pizza
|
|
|
|
fmt.Println("========= 工厂方法模式 =========")
|
|
|
|
// 创建芝士披萨
|
|
factory = &CheesePizzaFactory{}
|
|
fmt.Println("芝士披萨工厂启动:")
|
|
pizza = factory.createPizza()
|
|
pizza.show()
|
|
|
|
// 创建意大利辣香肠披萨
|
|
factory = &PepperoniPizzaFactory{}
|
|
fmt.Println("意大利辣香肠披萨工厂启动:")
|
|
pizza = factory.createPizza()
|
|
pizza.show()
|
|
|
|
fmt.Println("======= 工厂方法模式结束 =======")
|
|
}
|