设计模式系列:抽象工厂模式

来源:互联网 发布:梦里花落知多少下载txt 编辑:程序博客网 时间:2024/06/07 08:57

一.名称

  抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。
  例如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电器厂1生产电视机类型1和电冰箱类型1,海尔电器厂2生产电视机类型2和电冰箱类型2,这个时候就必须要用抽象工厂模式了,工厂方法模式已经无法处理这种情况了。

  体现了:依赖倒置,开放封闭,单一职责,接口隔离,迪米特法则,里氏替换原则。体现了所有的设计原则。
抽象类和继承——依赖倒置
抽象类——开闭原则
类间解耦——迪米特原则
抽象类——里氏替换原则

  抽象工厂模式主要通过增加抽象层来实现解耦。这个是这个模式的核心。

二.问题(为了解决什么问题)

系统中有多于一个的产品族。

三.解决方案(主要体现在uml和核心代码上)

这里写图片描述

说明:
(1)AbstractFactory:它声明了一组用于创建一族产品的方法,每一个方法对应一种产品。
(2)ConcreteFactory:它实现了在抽象工厂中声明的创建产品的方法,生成一组具体的产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
(3)AbstractProduct:它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法。
(4)ConcreteProduct:它定义具体工厂生产的具体产品对象,实现在抽象接口中声明的业务方法。

代码略,简单

抽象工厂模式与工厂方法模式区别
  抽象工厂模式与工厂方法模式的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构(即是面向产品族的),一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建。当一个工厂等级结构可以创建出分属不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效。

四.效果(有啥优缺点)

优点
1. 抽象工厂模式为创建一组对象(对象族)提供了一种解决方案。
2. 增加新的产品族很容易,符合开闭原则

缺点
1. 增加新的产品结构很麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码。

常见案例

界面皮肤库。
这里写图片描述

手机游戏软件。可以支持塞班、android、ios、wp系统。针对不同的系统提供不同的游戏控制类和游戏界面控制类。

1 0