1

自分のやりたいことにぴったりのデザインパターン「Builder」に出くわしました。iOSアプリケーションでは、さまざまなコアデータエンティティがあり、オブジェクトをさまざまなデータ形式に変換できるようにしたいと考えています。現在、私の計画はXML、HTML、JSONをサポートすることです。そこで、「ビルダー」のような標準的なデザインパターンを使ってこのソリューションを設計することを考えていました。私の質問のいくつかは

  1. Builderパターンはこの問題の正しいパターンですか?
  2. このパターンをObjectiveCで使用できますか?Obj Cには抽象クラスの概念がないため、これにどのようにアプローチするかがわかりません。抽象メソッドを定義するには、基本クラスとプロトコルを使用する必要があると考えています。

私のニーズに最適な新しいデザインソリューションをお気軽に提案してください。

あなたの提案とコメントをどうもありがとう。

よろしく、Javid

編集:もう1つの重要なポイントは、最終的な形式がさまざまなコアデータエンティティで構成されることです。たとえば、エンティティチームとプレーヤーがいる場合、チームとプレーヤーの両方を使用するデータ形式を作成する必要があります。

4

2 に答える 2

1

カテゴリを使用して、オブジェクトの動作を拡張できます。

たとえば、stringJSON 機能を NSDictionary に追加する場合は、次のようにします。

NSDictionary+JSON.h:

@interface NSDictionary (json)
-(NSString *) stringJSON;
@end

NSDictionary+JSON.m

@implementation NSDictionary (json)
-(NSString *) stringJSON {
    return @"{key:\"...\"}";
}
@end

NSDictionary オブジェクトでこの新しいメソッドを使用する任意の.mファイルに、カテゴリを含めます。

#include "NSDictionary+JSON.h"

そして次のように使用します:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value",@"key", nil];
NSLog(@"%@",[dict stringJSON]);

参考文献: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1

http://cocoadevcentral.com/d/learn_objectivec/

于 2011-04-20T22:18:34.680 に答える
1

1) はい、Builder パターンはこの問題に対する良い解決策のように思えます。Builder の背後にある考え方は、全体的なビルド プロセスはすべてのデータ形式で一貫しているが、ビルドの詳細は異なるというものです。

2) はい、Builder パターンは Objective C で使用できます。Director とさまざまな ConcreteBuilder クラスはすべて通常のクラスであり、Builder 抽象クラスは、表現されている場合、Director が使用するプロトコルになります。

ディレクターで次のような結果になる可能性があります。

@implementation Director
- (void)construct {
    for (Team* team in self.allTeams) {
        [self.builder buildTeamStart];
        for (Player* player in team.allPlayers)
            [self.builder buildPlayer];
        [self.builder buildTeamEnd];
    }
}
于 2011-04-21T12:00:24.010 に答える