为什么需要观察者模式
在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密, 将使软件不能很好地抵御变化。使用面向对象技术(观察者模式),可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。
举例:
目前项目需要将文件分割器的分割进度通知到界面显示。
//界面类
class MainForm : public Form
{
TextBox* txtFilePath;
TextBox* txtFileNumber;
ProgressBar* progressBar;//进度条展示文件分割进度
public:
void Button1_Click(){
string filePath = txtFilePath->getText();
int number = atoi(txtFileNumber->getText().c_str());
FileSplitter splitter(filePath, number, progressBar);
splitter.split();
}
};
/*文件分割器*/
class FileSplitter
{
string m_filePath;
int m_fileNumber;
ProgressBar* m_progressBar;//编译时依赖 依赖了实现细节
public:
FileSplitter(const string& filePath, int fileNumber, ProgressBar* progressBar) :