抽象工厂模式

本博客实例已同步到github

抽象工厂模式是工厂方法模式的升级版本

  • 工厂方法模式只生产一个等级的产品,如TCL和海尔生产空调
  • 而抽象工厂模式可生产多个等级的产品,如TCL和海尔不仅生产空调,而且生产电冰箱。此时TCL和海尔叫做产品族。空调和电冰箱是产品结构
  • 当系统中只存在一个等级结构产品的时候,抽象工厂会退化到工厂方法模式

抽象工厂模式使用场景

  • 客户端不依赖一产品类实例如何被创建、实现等细节
  • 强调一系列相关的产品对象器使用创建对象需要大量重复的代码
  • 提供一个产品类的库,所以产品以接口出现,客户端不依赖具体实现

缺点:产品中扩展新的产品困难,需要修改抽象工厂的接口

角色结构

包含5中角色(和工厂方法模式一样)

  • 产品接口
  • 实际产品
  • 工厂接口
    • 不同于工厂方法模式,这个工厂中包含多个方法(即多个产品等级结构)
  • 实际生成产品的工厂
  • 客户端

工厂模式之间的区别

细说简单工厂模式,工厂方法模式和抽象工厂模式之间的区别

对于下图来说:

在这里插入图片描述

产品等级结构可理解为具体产品:电冰箱,电视,空调

产品族可理解为工厂品牌:海尔,海飞丝,海信,格力,杰士邦

我在gihub上同步了三个框架相同的例子来描述这三种模式的代码,需要可以查看

如果有多个产品等级结构,(且每个产品族有多个产品族),则适合于抽象工厂模型

如果只有一个产品等级结构,如只有方形,圆形或者椭圆形,则退化为工厂方法模型

如果只有一个产品等级结构,且只有一个产品族,则退化为简单工厂模型

抽象工厂模式的实例
  • JavaSE中的Button和Text对应不同的Windows和Linux

  • 数据库连接的Connect和Statement都是抽象工厂接口

  • MyBatis中的SqlSession也是一个抽象工厂接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值