项目中遇到一个问题,有一个文件管理类,但是文件的目录不确定,而其他的文件相关的属性的确定了,如下所示:
class FileMgr
{
public:
//获取可用目录
std::string get_directory ();
//其他属性
.....
}
这个让我头疼的问题让我想到了“把容易变化的和不容易变化的分开处理”,我想到了把目录处理分出去,结构图如下
因为文件管理FileMgr类已经确定了,所以把目录的处理扩展出来,以后需要更改实现的话,直接修改DirectoryMgr就可以了,具体实现如下
class FileMgr
{
public:
FileMgr ()
{
m_directory_mgr = new DirectoryMgr ();
}
//获取可用目录
std::string get_directory ()
{
return m_directory_mgr->getDirectory (this);
}
//其他方法
.....
private:
IDirectoryMgr * m_directory_mgr;
//其他属性
}
本实现采用委托的方法,把目录的实现委托给了DirectoryMgr来实现,自己只需要调用接口就可以,这样实现的好处是实现了FileMgr累的封闭,这是一种设计模式的应用,属于”策略模式“面对一些已经有确定方案的东西,和一些仍然没有确定方案的东西,此方法都可以使用,所以记下来和大家分享