工厂模式通过对象创建绕开new,避免对象创建时的紧耦合。
此类使用一个文件分割器
class mainform{
....
public:
.....
filesplitter* splitter=new filesplitter();//原方法需要在这new具体的对象
splitter->split();
};
class filesplitter{
public:
void split(){
....
}
};
若我们需要增加图片分割器,文本分割器等需要在new时依赖具体的类,可使用工厂方法来根据需要使用具体的分割器方法
class isplitter{
public:
virtual void split()=0;
virtual ~isplitter(){}
};
class splitterfactory{
public:
virtual isplitter* createsplitter()=0;
virtual ~splitterfactory(){}
};
class filesplitter:public isplitter{
public:
void split(){
....
}
};
class textsplitter:public isplitter{
public:
void split(){
....
}
};
class videosplitter:public isplitter{
public:
void split(){
....
}
};
class factoryfilesplitter:public splitterfactory{
public:
virtual isplitter* createsplitter(){
return new filesplitter();
}
};
class factorytextsplitter:public splitterfactory{
public:
virtual isplitter* createsplitter(){
return new textsplitter();
}
};
class factoryvideosplitter:public splitterfactory{
public:
virtual isplitter* createsplitter(){
return new videosplitter();
}
};
class mainform{
splitterfactory* factory;//注意此处创建的是一个指针,不创建对象的原因是因为这是一个虚基类,不能创建对象实例化
public:
mainform(splitterfactory* factory){//通过此构造函数传入我们想要分割的类型
this->factory=factory;
}
isplitter* splitter=factory->createsplitter();//调用工厂模式创建一个具体的splitter对象,创建指针原因如上一样
spiltter->split();//调用具体的split方法
};
模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。factory method使得一个类的实例化延迟到子类。
设计模式-工厂模式
最新推荐文章于 2024-05-13 18:08:14 发布