第六课 抽象工厂模式
抽象工厂模式其实和工厂方法模式思路一样,可以说是工厂方法模式的一个特例,用于控制一个系列的产品的不同版本。简单举个例子(可能不适用于.net)我现在有几个界面UI控件产品,Button,Label,TextBox。大家应该知道,windows和Mac系统底层对UI的实现不同,所以创建控件的方式可能不同。这样我可能出2套产品,一套是为Windows实现的,另一套是基于Mac实现的。这样我为了方便的获得两套产品,就需要用抽象工厂模式。换句话说,抽象工厂在应用的时候,需要判断产品的横向和纵向。假设横向是一个系列的产品,纵向是不同的版本实现的话,就有类似下面这样的一个矩阵。
ButtonForWin LabelForWin TextBoxForWin
ButtonForMac LabelForMac TextBoxForMac
ButtonForLinux LabelForLinux TextBoxForLinux
其实就是3个产品,Button Label TextBox ,但是针对3个操作系统实现了3个版本而已。
这样大家有点印象了吧,下面开始看代码。Java版
首先系列产品的抽象
1. public interface Button
2. {
3. ...
4. }
5.
6. public interface Label
7. {
8. ...
9. }
这里我懒的打TextBox了,就用俩来看吧。
然后Windows实现:
1. public class WinButton implements Button
2. {
3. ...
4. }
5.
6. public class WinLabel implements Label
7. {
8. ...
9. }
再看Mac实现:
1. public class MacButton implements Button
2. {
3. ...
4. }
5.
6. public class MacLabel implements Label
7. {
8. ...
9. }
Windows和Mac的实现UI方式肯定不同,这里不描述了。
然后来看工厂:
1.
2. public abstract class UIProducer
3. {
4. public abstract Button createButton();
5.
6. public abstract Label createLabel();
7.
8. public static UIProducer getInstance(String which)
9. {
10. if (which.equalsIgnoreCase(