前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GoF 23】篇3:抽象工厂

【GoF 23】篇3:抽象工厂

作者头像
CODER-V
发布2023-03-12 09:54:29
1580
发布2023-03-12 09:54:29
举报
文章被收录于专栏:藏经阁藏经阁

1. 什么是抽象工厂?

提供一个创建一系列相关或互相依赖的对象接口,而无需指定它们的具体类。

抽象工厂是一个超级工厂,是其他工厂的工厂,或将简单工厂进一步抽象。

这样来理解: 我们将科技公司可以做的事情简要枚举出来,生产手机、电脑、路由器等等,比如小米、华为、联想等公司都可以生产这些产品。

这里,我们就可以将科技公司可以生产的产品全部在一个接口中枚举出来,这个接口就可以看作一个抽象工厂。而小米、华为、联想这些公司就是普通工厂。抽象工厂将普通工厂可以生产的产品进行抽象出来。

这里有两个概念:产品簇、产品级

  • 产品簇:或许称之为“产品系”会更便于理解,比如小米生产的手机、电脑都是小米系列的,这就是一个产品簇。
  • 产品级:或许称之为“产品类”会更便于理解,手机和手机就是一个产品级,它们都是同一类商品,都是手机。

2. 代码示例

  1. 定义普通工厂的抽象工厂
代码语言:javascript
复制
// 抽象工厂,抽象方法为科技公司可以生产的产品
public interface ProductFactory {

	// 可以生产手机,产品簇
	PhoneProduct phoneProduct();
	// 可以生产电脑,产品簇
	ComputerProduct computerProduct();

}
  1. 定义普通手机工厂
代码语言:javascript
复制
// 产品级
public interface PhoneFactory { ... }
  1. 定义普通电脑工厂
代码语言:javascript
复制
// 产品级
public interface ComputerFactory { ... }
  1. 定义小米生产手机
代码语言:javascript
复制
public class XiaoMiPhone implements PhoneFactory{ ... }
  1. 定义小米生产电脑
代码语言:javascript
复制
public class XiaoMiComputer implements ComputeFactory{ ... }
  1. 定义小米工厂,在这里实现抽象工厂
代码语言:javascript
复制
// 小米工厂要实现抽象工厂,抽象工厂就是将工厂可以做的事情抽象出来,具体行为由子工厂去定义
// 其实这里就是一个简单工厂,所以抽象工厂就是对简单工厂的抽象
public class XiaoMiFactory implements ProductFactory {
	// 小米可以生产手机
	public PhoneProduct phoneProduct(){
		return new XiaoMiPhone();// 在这里创建对象,但是具体行为在子类中
	}
	// 小米可以生产电脑
	public XiaoMiComputer xiaoMiComputer(){
		return new XiaoMiComputer();
	}
}
  1. 客户端
代码语言:javascript
复制
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
xiaoMiFactory.phoneProduct();//创建手机的实例
xiaoMiFactory.xiaoMiComputer()//创建电脑的实例

3. 小结

抽象工厂的本质就是:选择产品簇的实现。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是抽象工厂?
  • 2. 代码示例
  • 3. 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档