GO AbstractFactory 抽象工厂

本文深入探讨了设计模式中Abstract Factory模式的应用与实现,强调了它在创建一系列相关或相互依赖对象时的优势,以及如何通过基类关联防止错误的交叉调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式定义

提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
——《设计模式》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()
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值