设计模式之 abstract factory

适用场景

  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时

架构演示

首先client这个东西可以接触到三个接口, 分别是

  • 全局的 abstract factory, 用来构造对应的子 abstract factory
  • 然后我们可以通过子 abstract factory 去构造相应的 abstract product
  • 局部的 abstract product, 用来从上面的 abstract factory 获取对应的属性

好处就是:

  1. abstract factory 约束了创建接口的行为
  2. abstract product 约束了对应产品的行为

代码演示

首先创建一个工厂接口

go 复制代码
type ISportFactory interface {
	MakeShoe() IShoe
	MakeShirt() IShirt
}

对应的一个产品, 我们可以通过抽象工厂搞出来的两个东西

go 复制代码
type IShoe interface {
	setLogo(logo string)
	setSize(size int)
	getLogo() string
	GetSize() int
}

type IShirt interface {
	setLogo(logo string)
	setSize(size int)
	getLogo() string
	GetSize() int
}

我们首先看一下对应的工厂函数:

go 复制代码
func GetSportsFactory(brand string) ISportFactory {
	if brand == "adidas" {
		return &Adidas{}
	}
	if brand == "nike" {
		return &Nike{}
	}
	return nil
}

然后我们看实例的具体实现也就是makeshoe

go 复制代码
func (adids *Adidas) MakeShoe() IShoe {
	return &AdidsShoe{
		Shoe: Shoe{
			logo: "adidas",
			size: 10,
		},
	}
}

同样的我们可以到

go 复制代码
//实现了ishoe接口
type Shoe struct {
	logo string
	size int
}
相关推荐
茶本无香4 分钟前
通用报表自动化框架:Java调用Shell传参执行PostgreSQL SQL模板
java·sql·postgresql·shell
weixin_BYSJ19877 分钟前
flask民族服饰饰品商城小程序---附源码37399
java·javascript·spring boot·python·小程序·django·php
爱笑的源码基地13 分钟前
智慧工地源码, 智慧工地环境监测系统架构与绿色施工闭环设计
java·源码·智慧工地·绿色工地
YDS82918 分钟前
大营销平台 —— 第二阶段应用接口实现
java·spring boot·ddd
zlinear数据采集卡19 分钟前
数据采集卡从入门到精通(7):流水线型ADC——级级接力,高速与高精的平衡术
开发语言·arm开发·嵌入式硬件·fpga开发·c#
一水23 分钟前
AI 时代审查思维:审查第一篇
java·jvm·数据库·spring
Dr.kangder34 分钟前
嵌入式面试总结(二十一)——C语言关键字
c语言·开发语言·面试·职场和发展·架构·虚拟化
RainCityLucky39 分钟前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
W_3260041 分钟前
Python-OpenCV:库、环境搭建、图片与摄像头解析
开发语言·图像处理·python·opencv·机器学习
zhy2956342 分钟前
在 QAIRT Genie SDK 上部署 Llama 3.2 1B 模型:从环境准备到 C++ 推理
开发语言·c++·llama