在软件系统中,经常面临着”某些结构复杂的对象“的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口
如何应对这种变化?如何向”客户程序“(使用这些对象的程序)”隔离出“这些易变对象 ,从而使得”依赖这些易变对象的客户程序“不随着需求变化而变化?
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新对象。
和工厂模型用的同一个实例 工厂模式
//工厂
class SplitterFactory{
public:
virtual ISplitter* CreateSplitter() = 0;
~SplitterFactory(){
};
}
//抽象类
class ISplitter{
public:
virtual void split() = 0;
virtual void ~ISplitter(){
}
}
//具体类
class FileSpliter : ISplitter{
}
class TxtSpliter : public ISplitter{
};
class BinarySplitter : public ISplitter{
};
//具体工厂
BinarySplitterFactory : public SplitterFactory{
public :
virtual ISplitter *CreateSplitter(){
return new BinarySplitter()
}
}
class MainForm : public Form{
TextBox * txtFilaPath;
TextBox * txtFileNumber;
ProgressBar *progressBar;
SplitterFactory * factory;//工厂
public :
MainForm(SplitterFactory *factory){
this->factory = factory;
}
void Button_Click(){
string filePath = txtFilaPath->getText();
int number = atoi(txtFileNumber->getText());
ISplitter *splitter = factory->CreateSplitter(); //多态new
splitter.split();
}
}
原型模式
//抽象类
class ISplitter{
public:
virtual void split() = 0;
virtual void ~ISplitter(){
}
virtual ISplitter* CreateSplitter() = 0;
}
//具体类
class FileSpliter : ISplitter{
public :
virtual ISplitter *clone(){
return new FileSpliter()
}
}
class TxtSpliter : public ISplitter{
public :
virtual ISplitter *clone(){
return new TxtSpliter()
}
};
class BinarySplitter : public ISplitter{
public :
virtual ISplitter *clone(){
return new BinarySplitter()
}
};
class MainForm : public Form{
TextBox * txtFilaPath;
TextBox * txtFileNumber;
ProgressBar *progressBar;
ISplitter * prototype;//工厂
public :
MainForm(SplitterFactory *prototype){
this->prototype = prototype;
}
void Button_Click(){
string filePath = txtFilaPath->getText();
int number = atoi(txtFileNumber->getText());
ISplitter *splitter = prototype->clone(); //多态new
splitter.split();
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168509.html原文链接:https://javaforall.cn