模式定义
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
——《设计模式》GoF
要点总结
如果没有对应“多系列对象构建”的需求变化,则没有必要使用Abstract Factory 模式,这时候使用简单的工厂完全可以。
“系列对象”指的是在某一特定系列下的对象之间相互依赖、或作用的关系。不同系列的对象之间不能相互依赖。
Abstract Factory 模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
典型实现
把一系列相关对象由一个基类关联在一起,防止错误的交叉调用。
要点总结和典型实现来自于 --李建忠 C++ 抽象工厂设计模式总结 https://www.jianshu.com/p/ac1ca28f4100
package main
import "fmt"
// 产品接口
type Brand interface {
ProducePhone()
ProducePC()
}
// 产品工厂接口
type BrandFactory interface {
CreateFactory() Brand
}
// 创建Mi品牌
type Mi struct {
}
func (m *Mi) ProducePhone(){
fmt.Println("小米生产手机")
}
func (m *Mi) ProducePC(){
fmt.Println("小米生产电脑")
}
// 创建MI手机工厂
type MiFactory struct {
}
func (m *MiFactory) CreateFactory() Brand{
return &Mi{}
}
// 创建HW品牌
type HW struct {
}
func (hw *HW) ProducePhone(){
fmt.Println("HW生产手机")
}
func (hw *HW) ProducePC(){
fmt.Println("HW生产电脑")
}
type HWFactory struct {
}
// 创建HW手机工厂
func (hw *HWFactory) CreateFactory() Brand{
return &HW{}
}
type Factory struct {
bf BrandFactory
}
func (f *Factory) Produce(){
// 工厂生产PC
f.bf.CreateFactory().ProducePC()
f.bf.CreateFactory().ProducePhone()
}
func main(){
mi := new(MiFactory)
f := Factory{}
f.bf = mi
f.Produce()
hw := new(HWFactory)
f.bf = hw
f.Produce()
}