工厂方法(简单工厂)
定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method是得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。 ——《设计模式》GoF
exp:实现一个多类型的分割器
//抽象类
class ISplitter{
public:
virtual void split()=0;
virtual ~ISplitter(){}
};
//工厂基类
class SplitterFactory{
public:
virtual ISplitter* CreateSplitter()=0;
virtual ~SplitterFactory(){}
};
//具体类
class BinarySplitter : public ISplitter{
};
class TxtSplitter: public ISplitter{
};
class PictureSplitter: public ISplitter{
};
class VideoSplitter: public ISplitter{
};
//具体工厂
class BinarySplitterFactory: public SplitterFactory{
public:
virtual ISplitter* CreateSplitter(){
return new BinarySplitter();
}
};
class TxtSplitterFactory: public SplitterFactory{
public:
virtual ISplitter* CreateSplitter(){
return new TxtSplitter();
}
};
class PictureSplitterFactory: public SplitterFactory{
public:
virtual ISplitter* CreateSplitter(){
return new PictureSplitter();
}
};
class VideoSplitterFactory: public SplitterFactory{
public:
virtual ISplitter* CreateSplitter(){
return new VideoSplitter();
}
};
class MainForm : public Form
{
SplitterFactory* factory;//工厂
public:
MainForm(SplitterFactory* factory){
this->factory=factory;
}
void Button1_Click(){
ISplitter * splitter=
factory->CreateSplitter(); //多态new
splitter->split();
}
};
工厂模式用于隔离对象使用者和具体类型的紧耦合关系。通过面向对象的手法将具体工作延迟到子类,实现了解耦。
缺点:要求创建方法和参数相同
遗留问题,外层如何选择该创建的类型呢?使用参数传递,感觉还是需要指定啊,还是有耦合关系啊。