设计模式之 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
}
相关推荐
smallyoung5 小时前
告别N+1:Spring Boot 一键数据翻译框架体系
java·后端·架构
Bazingga7 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff8 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3278 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar8 小时前
Java封装、继承、多态
java·开发语言
ly76899 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠9 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
高晶9 小时前
CANopen 在 BMS 系统中的 C 语言实战指南
设计模式·程序员
weixin_307779139 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
奇牙coding9 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai