ファクトリクラス
pure virtualメソッドのみで構成されたインターフェースクラスは、
その実装とは完全に独立しています。
したがって、newによるクラスインスタンス生成を他のコードから切り離せば、
複数の実装を簡単に切り替えられます。
インターフェースのクラスインスタンス生成部分は、関数やクラスとして実装できます。
クラスとしてする場合、そのクラスはファクトリクラスと呼ばれます。
class CMyFileFactory {
IMyFile* create( const char* pURL, bool is_write_flag ) {
if ( <pURLがfile://の場合> )
{
CMyFile* pfile = new CMyFile();
if ( pfile->open(<ファイルパス>, is_write_flag) )
return pfile;
delete pfile;
}
else if ( <pURLがftp://の場合> )
{
CMyFTPFile* pfile = new CMyFTPFile();
if ( pfile->open(<ホスト>, <ファイルパス>, is_write_flag) )
return pfile;
delete pfile;
}
return NULL;
}
};
呼び出し側ではCMyFileFactoryを生成し、create()を呼び出します。
CMyFileFactoryを拡張することで、機能を容易に拡張できるようになっています。
関連ページ
COM/ActiveXの解説ページ 目次
前の項目: インターフェースと実装
次の項目: 参照カウント