COMの関連知識 - ファクトリクラス

いちごパック > COM/ActiveXの解説 > COMの関連知識 - ファクトリクラス

ファクトリクラス

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の解説ページ 目次
  • 前の項目: インターフェースと実装
  • 次の項目: 参照カウント