设计模式之 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
}
相关推荐
毕设源码-郭学长5 分钟前
【开题答辩全过程】以 高校图书推荐系统的设计与实现为例,包含答辩的问题和答案
java
主公不搬砖5 分钟前
Nacos 2.5.2 国产信创 kingbase适配
java·docker·nacos·信创·kingbase·国产适配
m0_626535206 分钟前
快速排序学习 l方法 h方法
开发语言·python
superman超哥19 分钟前
Rust String与&str的内部实现差异:所有权与借用的典型案例
开发语言·后端·rust·rust string·string与str·内部实现·所有权与借用
xiaowu08019 分钟前
C#调用 C++ DLL 加载地址方式选择
开发语言·c++·c#
谷隐凡二27 分钟前
Kubernetes Route控制器简单介绍
java·容器·kubernetes
雨中飘荡的记忆29 分钟前
责任链模式实战应用:从理论到生产实践
设计模式
Haooog29 分钟前
RAG医疗问答系统
java·大模型·项目·rag
luming-0235 分钟前
报错解决:IDEA终端输出和CMD终端输出Maven版本不一致
java·缓存·bug·intellij-idea
非凡ghost36 分钟前
MPC-QT视频播放器(基于Qt框架播放器)
开发语言·windows·qt·音视频·软件需求