おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Factory パターンの復習 と テンプレート

テンプレートを使いながら Factory パターンの復習をしてみました(正確には、Factory Method パターンなのかな)。

Factory パターンとはなんぞや?ということですが、簡単に言うと "何かIDを元にして、そのIDに対応したオブジェクトを生成する" パターンです。名前のとおりオブジェクトの生産工場です。使い道は色々ありますが、例えばドローツールを作るときに、"Circle", "Triangle", "Rectangle" なんて文字列を ID としてそれぞれ丸、三角、四角の形状オブジェクトを生成できると、形状オブジェクトの生成を管理するのに便利です(Excel のオートシェイプとかを想像してください)。

とりあえず、具体的にどんなものなのかは、サンプルプログラムの main() 関数を見てもらうのが手っ取り早いでしょう。

main.cpp

001 #include <string>
002 #include <iostream>
003 #include "IFruit.hpp"
004 using namespace std;
005 
006 int main()
007 {
008   // りんごを 2 つ、バナナを 1 つ生成してみる
009   IFruit* pApple1 = CFruitFactory::Instance().CreateInstance("ID_Apple");
010   pApple1->PrintName();
011 
012   IFruit* pBanana1 = CFruitFactory::Instance().CreateInstance("ID_Banana");
013   pBanana1->PrintName();
014 
015   IFruit* pApple2 = CFruitFactory::Instance().CreateInstance("ID_Apple");
016   pApple2->PrintName();
017   
018   // フルーツセットを生成して、りんごとバナナを追加してみる
019   IFruit* pFruitSet = CFruitFactory::Instance().CreateInstance("ID_FruitSet");
020   {
021     IFruitSet* pFruitSet2 = dynamic_cast<IFruitSet*>(pFruitSet);
022     pFruitSet2->Add(pApple1);
023     pFruitSet2->Add(pBanana1);
024     pFruitSet2->Add(pApple2);
025   }
026   pFruitSet->PrintName();
027   
028   delete pFruitSet;
029   
030   delete pApple1;
031   delete pBanana1;
032   delete pApple2;
033   
034   return 0;
035 }
036 

実行結果

I am Apple !
I am Banana !
I am Apple !
I am Fruit Set ! I have below fruits.
        I am Apple !
        I am Banana !
        I am Apple !

見てもらうとなんとなく分かると思いますが、IFruit をインターフェースとして派生するりんご、バナナとフルーツセット(これのインターフェースは IFruitSet ) となってます。

Factory パターンでオブジェクトを生成しているところの CFruitFactory::Instance() は、 Singleton パターンを Factory に併用しているためで、 Factory の唯一のインスタンスを取得しています。で、CreateInstance() でオブジェクトを生成します。

いきなり話し変わるけど、今ちょっとアルコールが入ってるのよね。やっぱ、ダメだわ後で追記します。説明不足でごめんなさい。

ソースは ここ にあげときますね。興味のある人は読んでみてください。数十行のコードなのですぐ読めると思います。
  1. 2006/10/20(金) 23:19:32|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<dynamic_cast を何とかせねば。 | ホーム | 疲れたぁ~>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/152-9c8e2753
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。