程序员的知识教程库

网站首页 > 教程分享 正文

极简设计模式——抽象工厂模式(抽象工厂模式结构图)

henian88 2024-10-18 05:58:21 教程分享 2 ℃ 0 评论

Hi,大家好,上期我介绍了工厂方法模式,本期来介绍工厂类模式的最后一种——抽象工厂模式,看过我之前关于简单工厂模式和工厂方法模式两篇文章之后,相信大家对这两种工厂的特点已经很了解了,我来总结一下:

简单工厂模式:负责创建一组实现了共同接口的轻量级对象,在一个单独的工厂类中进行所以实例化操作,扩展性差,可能会频繁修改工厂类

工厂方法模式:负责创建一组实现了共同接口的对象,他们有一个共同的抽象父类,实例化操作分散在各个子类中去完成,扩展性好,不对现有的类进行修改


下面开始介绍抽象工厂模式,说明它和简单工厂、工厂方法的区别,按惯例,我先来给出抽象工厂模式的理解:

有一组对象都实现了一个共同的接口,该对象有若干属性,这些若干属性和对象间存在很强的依赖对应关系,且这些若干属性存在一系列相似的产品,即属性会是一个接口,对象的创建依赖这些属性的创建,我们称该对象为重量级的对象。

为了更好的理解上述定义,我还是拿简单工厂模式那篇文档里面的实例来说明,我们在工厂方法模式那篇文章里面有这样一段代码:

宝马4S店

我们创建宝马汽车对象时是直接传入对应的轮胎和发动机对象,在实际情况下,宝马汽车对象和它的轮胎、发动机是有严格对应关系,不能弄错,如果直接这样传入,有可能会导致宝马汽车用的是奥迪的轮胎和发动机,这样问题就严重了,我们必须想办法让客户构造宝马汽车时不需要关心具体的属性的构造,怎么做到呢?当然是用抽象工厂模式来解决。

为了不让构造汽车所用到的轮胎和发动机存在配错的问题,我们把轮胎和发动机这两个配件属性的构建放在一个配件接口里面,即接口中存在两个抽象方法:createTire(),createEngine(),然后我们分别让宝马汽车和奥迪汽车实现这个配件接口,从而提供自己合适的轮胎和发动机对象,具体实现过程如下:

1、轮胎和发动机的抽象接口和实现:

轮胎抽象接口

发动机抽象接口

宝马汽车轮胎实现

奥迪汽车轮胎实现

宝马汽车发动机实现

奥迪汽车发动机实现

2、汽车套件接口及其实现类:

汽车套件接口

宝马汽车套件实现

奥迪汽车套件实现

3、抽象汽车类及其实现类:

抽象汽车类

宝马汽车

奥迪汽车

4、抽象的汽车4S店及其实现类:

抽象汽车4S店

宝马汽车4S店

奥迪汽车4S店

5、调用程序:

测试程序


相信看完上面的流程,大家对抽象工厂模式有了更深的理解,来总结一下吧:

1、抽象工厂模式也是一种对象创建型模式

2、抽象工厂模式和工厂方法模式大部分情况下会同时存在,一起使用(在子类中实例化)

3、对象强烈依赖的一组属性的构造,抽象工厂模式提供了一套成熟的解决方案

4、精确体现了对修改关闭、对扩展开放的设计原则

5、适用于创建复合型对象

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表