スキップしてメイン コンテンツに移動

Objective-Cの手習い:AbstractFactoryパターン

今回は『Java言語で学ぶデザインパターン入門』からAbstractFactoryパターン。

AbstractFactory

クラス数が多いのでクラス図を示しておこう。

とりあえずAbstract Factoryとは……
協調して働くセットのオブジェクトをまとめて作製するためのインターフェイスをプログラマーに提供するパターン。プログラマーは抽象クラスであるFactoryの具象クラスを何らかの方法で得て、その抽象的なインターフェイスを通じてセットのオブジェクトを生成する。

今回もほとんどそのままの移植で、Objective-Cらしいところはあまりない。
唯一Objective-Cに依存した部分は、Factoryクラスの具象クラス生成部。『Java言語で学ぶデザインパターン入門』ではJavaのClassクラスを使用して生成しているが、Objective-CではNSClassFromString関数を使用してClassクラスのインスタンスを生成し、そこからFactoryの具象クラスのインスタンスを生成する。


           Factory* factory = nil;
           Class factoryClass;
           factoryClass = NSClassFromString(classname); 
           if(!factoryClass) {
              return nil;
            }
            else {
              factory = [[[factoryClass alloc] init] autorelease];
              return factory;
            }

JavaのコードのようにExcetionを拾っていないので、呼び出し側で対処する必要がある。どうもObjective-CではExceptoinを積極的に使用していこうという思想ではないようだ。プログラマが考えよってことらしい。
今回はクラスが見つからない場合nilがかえるので呼び出し側では


        factory = [Factory factoryFromClassName:className];
            if (!factory) {
                printf("Class %s is not found.\n",argv[1]);
             }

としている。

参照:Foundation Framework Reference

コメント

  1. ご無沙汰してます。

    ちょっと時間が裁ってしまいましたが、やっとゼミでの発表をまとめることができました。Objective-CでMac上での発表はゼミでもはじめてのことみたいです。第一号になれました (^^)v

    ココでの記事と、突然のメールにもかかわらずコードまで見ていただいてアドバイスいただいたおかげです、先生 !

    亜梨

    返信削除
  2. どうも、

    iPhoneの開発関連書籍が解禁になっているので、Objective-Cについてはあの頃よりも巷で情報を得やすくなっていますよ。

    返信削除

コメントを投稿

このブログの人気の投稿

Google Calaboration

GoogleがCalDAVプロトコルを完全サポートさいた Calaboration を発表した。 まだ、Google Codeの扱いだが一部では大変な騒ぎになっている。 Calaboration を使用すると、設定をするだけでGoogle Calendarのスケジュー ルをiCalにエクスポートでき、そして双方向に同期させることができるという Macユーザーにとっては大変便利な機能を提供してくれるユーティリティ。 騒ぎになっているのは、 Spanning Sync のユーザーフォーラム。 なにせこのソフトはGoogle CalendarとiCalを同期させるというもの。全くバッ ティングしている。多くのユーザーが「Spanning Syncと何が違うんだ? どっ ちがいいんだ? Spanning Synはどうなるだ?」という質問の書き込みを始め た。 Spanning Sync Blogでは、「 How Does Google CalDAV Compare to Spanning Sync? 」という記事が掲載されたが、そこで主張されている違いは以下のような点。 大きな違いはコスト。 Googleは無料だが、Spannning Syncは年間利用料が必要であること。でも、わ たしは永久ライセンスを購入してしまったので関係ない。 iPhoneサポート。 GoogleのCalDAVを使った同期では、iPhone上で予定がread onlyとなって編集 できないとのこと(わたしは設定していないので未確認)。Spanning Syncで はGoogle Calender、iCal、iPhone上すべてで予定を編集できる。 カスタマーサポート。 たしかにGoogleが何かやってくれそうな気はしない。Spanning Syncはお金払っ ているしね。 コンタクトリストの同期。 Googleが提供していない機能として、Spanning SyncはMacのアドレス帳と Gmailのコンタクトを同期してくれる。アドレス帳の画像まで含めて同期して くれるのは驚きだ。もっとも日本語の場合は姓と名が逆転してしまうが、これ は姓名を分けて持っているアドレス帳と姓名を1フィールドで持っている Googleの違いから仕方がないだろう。Googleではないが

Scrivener 日本語チュートリアル

(2022-01-11) 以前からコメントをいただいていましたが、反応できていなく申し訳ありません。 問い合わせが多いので、以下のブログに転載してチュートリアルもダウンロードできるようにしました。 転載先 先日から[試していたScrivenerだが、すっかり気に入り勢い余ってチュートリアルの日本語訳版を作ってしまった。 作者にコンタクトしたところ、「どうぞ、公開しておくれ!」と快く承諾をもらえたので公開しておく。 チュートリアル自体はわたしが慣れないBritish Englishで書かれているため、微妙なニュアンスは違っている箇所があるかもしれあない。また、チュートリアル自体に関係ない言い回しなどは、端折ったり日本語に合うようにゆがめたりしている。誤りがあれば指摘ください。 Scrivener-Tutorial-Japanese.dmg(リンクを切りました。転載先をごらんください。) ちなみに作者のKeithは豪気にもライセンス進呈を申し出てくれたが、入れ違いで購入してしまっていたわたし…… (2010-09-20) 「 design non design 」で紹介いただきました。

EagleFiler is the best organizer software on MacOS X

しばらく放置気味だった Journler をまじめに使おうかと検討していましたが、どうも昨年の7月くらいから開発が止まっている節が感じられます。たくさん文書はリソースを保管した挙げ句に、製品として終わってしまうとかなり悲惨な痛手を被りそうな予感がします。 そこで、以前のバージョンを購入した MacJournal がアップグレード可能なので検討しました。が、 Journler のようにDocumentフォルダでなくデータを~/Library/Application Support/MacJournalに置くのが問題です。これではSpotlightに引っかからないし、バックアップも面倒です。このため、 MacJournal は選択肢から落としました。 いろいろと考えて行くと、 Journler には大きく2つの役割を期待していたようです。 日誌 日々ネットで入手した情報のアーカイブ 前者については別にブログもあるので、問題を棚上げにしました。その上で、後者をサポートできるアプリケーションを探すことにしました。 以前からこの分野では Yojimbo が有名です。 少し触ってみましたが、どうもインターフェイスがしっくり来ません。ソフトのネーミング("Yojimbo"="用心棒")もどうもフィーリングが…… 次に検討したのは、 Together 。 以前はKIT("Keep It Together"の意)と称していたようです。アップデートも頻 繁で勢いを感じます。インターフェイスも一般受けしそうで優れたものだと思 いますが、どうもこちらもネーミングでルー大柴を思い浮かべてしまって…… 結局、C-Commandの EagleFiler というソフトに落ち着きました。 EagleFiler は、F1キーでとにかくブラウザに表示されているものを取り込んでしまえます。標準ではWebArchive形式ですが、スタイルシートなどが外部に依存したままとなるのでわたしはPDF形式で取り込むようにしています。標準でRTF、Plain Text, HTML,PDFなどがサポートされています。また、他の同様のソフトにない機能としてメールがeml形式でそのまま取り込めのは非常に便利な点です。