Abstract Factory
Abstract Factory 非常适合于有相同的接口却有多种具体实现的应用场合,它比较简单实际编码的时候也多半都用到过,只是没有把它模式化。
Abstract Factory属于创建型模式的一种,典型应用场景就像《设计模式》中举的那个“多感官用户界面”的那个例子:
Presentation Manager和Moif属于两种不同的窗口系统各自的实现方式也不同,但他们都有窗口(Window)、滚动条(Scrollbar)的概念。WidgetFactory是一个纯虚基类,它定义了一个通用的接口分别用于创建窗口和滚动条;MotifWidgetFactory和PMWidgetFactory是WidgetFactory的子类,继承了WedgetFactorty的接口负责实际创建各自的窗口和滚动条。Client是这个多用户感官窗口系统类的调用者,负责创建窗口。Client创建窗口的代码看起来可能会像这样:
class CommonWidget
{
enum WidgetType
{
TYPE_PM = 0, // Presentation Manager Style
TYPE_MOTIF = 1 // MOTIF Style
};
public:
int CreateWidget(WidgetFactory *pCommonWidget)
{
if(pCommonWidget == NULL)
{
return -1;
}
CommonWindow.CreateWindow();
CommonWindow.CreateScrollbar();
return 0;
}
int CreateWidgetByOpt(int iType)
{
int iRet = 0;
WidgetFactory *pCommonWidget = NULL;
switch(iType)
{
case TYPE_PM:
pCommonWidget = new PMWidgetFactory;
iRet = CreateWidget(pCommonWidget);
break;
case TYPE_MOTIF:
pCommonWidget = new MotifWidgetFactory;
iRet = CreateWidget(pCommonWidget);
break;
default:
break;
}
if(pCommonWidget != NULL)
{
delete(pCommonWidget);
}
return iRet;
}
}
;
利用多态实现了一套代码调用统一的接口实现不同类型窗口的适配。