当前位置: 首页 > news >正文

Go语言设计模式(三)抽象工厂模式

抽象工厂模式与工厂模式类似,被认为是工厂方法模式的另一层抽象.抽象工厂模式围绕创建其他工厂的超级工厂工作.

1.角色:

1.1抽象产品:

构成产品系列的一组不同但相关的产品的声明接口.

1.2具体产品:

实现抽象产品接口的类,主要用于定义产品对象,由相应的具体工厂创建.

1.3抽象工厂:

创建抽象产品对象的操作接口.

1.4具体工厂:

实现抽象工厂接口的类.用于创建产品对象.每个具体工厂都会生产相应的具体产品.

1.5客户端:

通过抽象接口调用抽象工厂对象和抽象产品对象,客户端能与所有具体工厂或具体产品交互.

2.抽象工厂使用场景:

2.1出于对代码未来扩展性考虑.不希望代码基于具体产品进行构建,可以使用抽象工厂模式.

2.2某个类具有一组抽象方法,并且这个类功能不够明确,可以考虑抽象工厂模式.

2.3如果一个类需要与多种类型的产品交互,可以考虑将工厂方法抽取到具备完整功能的抽象工厂接口中.

3.实现方式:

3.1抽象产品接口:
package itboStudyimport "fmt"// 抽象产品接口
type AbstractProduct interface {GetName() 
}// 具体产品类
type Computer struct {
}//具体产品类中的方法
func (c *Computer) GetName() {fmt.Println("具体产品Computer")
}
3.2抽象工厂接口:
//抽象工厂接口
type AbstractFactory interface {CreateProduct() AbstractProduct
}
3.3具体工厂类及方法:
// 具体工厂类
type ComputerProductFactory struct{}// 初始化具体工厂对象.
func NewComputerProductFactory() ComputerProductFactory {return ComputerProductFactory{}
}// 使用具体工厂对象创建具体产品
func (com *ComputerProductFactory) CreateProduct() Computer {return Computer{}
}
3.4客户端:
func main() {factory := itboStudy.NewComputerProductFactory()product := factory.CreateProduct()product.GetName()
}

4.实战:

4.1抽象接口:
// 电子产品工厂
type InterfaceElectronicFactory interface {MakeComputer() InterfaceComputer
}// 获取电子产品工厂对象
func GetElectronicFactory(brand string) (*LenovoFactory, error) {if brand == "电脑" {return &LenovoFactory{}, nil}return nil, fmt.Errorf("%s", "error brand type")
}
4.2具体工厂类:
// 定义具体工厂类
type LenovoFactory struct{}// 生成联想电脑
func (com *LenovoFactory) MakeComputer() *LenovoComputer {return &LenovoComputer{Computer: Computer{color: "black",size:  14,},}
}
4.3抽象产品接口:
type InterfaceComputer interface {SetColor(color string)SetSize(size int)Getcolor() stringGetsize() int
}type Computer struct {color stringsize  int
}func (com *Computer) SetColor(color string) {com.color = color
}func (com *Computer) SetSize(size int) {com.size = size
}func (com *Computer) GetSize() int {return com.size
}func (com *Computer) GetColor() string {return com.color
}
4.4具体产品类:
// 定义具体产品
type LenovoComputer struct {Computer
}
4.5客户端:
func main() {factory, _ := itboStudy.GetElectronicFactory("电脑")computer := factory.MakeComputer()fmt.Printf("computer:%#v\n", computer.GetColor())
}

5优点:

客户端不知道创建什么类型对象时.

抽象工厂实现了具体的隔离.

抽象工厂可以轻松改变产品系列.

保证产品一致性.

6.缺点:

抽象工厂难以扩展新型产品.如果要支持新型产品需要扩展工厂接口.

可以迟到,但是不会缺席.


文章转载自:

http://O6sHGSIa.ngznq.cn
http://l55DGyMy.ngznq.cn
http://TXFAxlgo.ngznq.cn
http://jocOFkFa.ngznq.cn
http://fK3OgoGA.ngznq.cn
http://L8tdz4Wt.ngznq.cn
http://Q2Y8ES05.ngznq.cn
http://OEO8Ezvl.ngznq.cn
http://kIPc2rd2.ngznq.cn
http://kyp53rda.ngznq.cn
http://ciOvSmjg.ngznq.cn
http://ULQihEX2.ngznq.cn
http://Qk3fSEb7.ngznq.cn
http://P4kLtAwX.ngznq.cn
http://zs9TfB7P.ngznq.cn
http://Sozn7UZQ.ngznq.cn
http://JRtHNMLO.ngznq.cn
http://UnKlpVFf.ngznq.cn
http://miPdF3OG.ngznq.cn
http://26mUxEFx.ngznq.cn
http://CrwIIKRa.ngznq.cn
http://IFGuY77i.ngznq.cn
http://FukKMbRs.ngznq.cn
http://kdVkFvhF.ngznq.cn
http://p0851cHr.ngznq.cn
http://TgQmYyMT.ngznq.cn
http://0QDGDN2I.ngznq.cn
http://mNXWIsQ0.ngznq.cn
http://hzWvKgXF.ngznq.cn
http://b6WjNdHH.ngznq.cn
http://www.dtcms.com/a/369780.html

相关文章:

  • SDRAM-08 数据手册解读
  • [光学原理与应用-436]:晶体光学 - 各向同性与各向异性是描述材料物理性质随方向变化特性
  • python:如何生成 TA-Lib .whl 安装包?
  • AD渗透中服务账号相关攻击手法总结(Kerberoasting、委派)
  • 从Java全栈到Vue3实战:一次真实面试中的技术探索
  • python graphviz中文测试
  • 【VoNR】VoNR 不等于 VoLTE on 5G
  • 基于 GEE 批量下载 Landsat8 地表温度(LST)数据
  • 从“下山”到AI引擎:全面理解梯度下降(下)
  • Linux应用(2)——标准/目录IO
  • 问题三ai思路
  • 玳瑁的嵌入式日记D33-0905(IO多路复用)
  • GigaDevice(兆易创新)GD25Q64CSJGR 64Mbit FLASH
  • FEMDRW032G-88A19江波龙,工业级宽温EMMC存储FEMDRW032G采用eMMC5.1协议,具备32GB存储容量提供方案
  • Interior AI-AI驱动的室内设计工具
  • 裸机程序(3)
  • ai连接怡和达进行非标选型 抓包失败
  • 嵌入式系统学习Day31(多路IO复用)
  • vim 常用快捷键汇总
  • 1.进程与线程:区别、通信方式、同步方式
  • The Algorithmic Foundations of Differential Privacy - 4
  • 各种背包问题简述
  • Python反向迭代完全指南:从基础到高性能系统设计
  • CRYPT32!ASN1Dec_SignedDataWithBlobs函数分析之CRYPT32!ASN1Dec_AttributesNC的作用是得到三个证书
  • vcenter管理的4台安装了esxi机器组成的HA,故障后自恢复理解
  • 智慧医疗——解读医院智慧管理分级评估标准体系【附全文阅读】
  • C++ map和set
  • js闭包问题
  • 【教学类-36-10】20240905(通义万相)-A4各种大小的鱼制作“吐泡泡的鱼”01版
  • 【工具变量】上市公司企业海外业务收入数据集(2003-2024年)