设计模式学习-每日一记(4.抽象工厂)
抽象工厂模式
A.定义:
提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类.
B.定义分析:
"提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."类似简单工厂和工厂方法,要定义一个类,提供接口,但是是多个.
"提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."这个接口象简单工厂的接口一样,创建对象,但是有个约束:这些对象是相关的或者相互依赖的;
"提供创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类."这句话的意思可能是:因为抽象工厂派生类已经约束了种类,这里无须指定.
C.问题
(1)什么样的对象可以成为相关的或者相互依赖的?
例如:windows界面中提供的Button类,Window类,List类等,这一系列是相关的;gtk界面中提供的Button类,Window类,List类,这一系列是相关的.
(2)抽象工厂具体可以是什么形式的?
抽象工厂类定义了创建对象的接口:
class AbstractFactory
{
virtual AbstractButton createButton();
virtual AbstractWindow createWindow();
virtual AblstractList createList();
};
class WindowsFactory : public AbstractFactory
{
AbstractButton createButton()
{
//创建windows系统上的Button组件
}
};
class GtkFactory : public AbstractFactory
{
AbstractButton createButton()
{
//创建gtk系统上的Button组件
}
};
抽象工厂类提供了接口,具体子类来实现这些接口,这样的形式类似工厂方法定义接口子类实现的形式.
(2)和工厂方法模式有什么不同?适用什么情况?
工厂方法模式创建了一个对象,而抽象工厂提供了创建多个对象的接口.
适用于创建一类产品这样的情况.