2

1 つのファイル形式にハードコーディングせずにアプリ用のデータ マネージャーを作成する必要があるため、データの保存方法を変更したい場合は、簡単に行うことができます。この目的のために、アダプター パターンを選択します。

データを作成して保存するための一般的なメソッドを記述した DataManager クラスがあります。

@protocol DataManagerProtocol
@required
- (void) readFile;
- (void) saveFile;
@end

@interface DataManager : NSObject
{
    NSMutableArray *items;
    NSMutableString *destPath;
}

// many different methods

@end

特定の形式でデータを保存する方法がある DataFileManager があるよりも:

@interface DataFileManager : NSObject
- (void) savePlist;
- (void) readPlist;
@end

@implementation DataFileManager

- (void) savePlist
{
    NSLog(@"The plist file was saved.");
}

-(void) readPlist
{
    NSLog(@"The plist file was readed.");
}

@end

そして、インターフェイスを変換するための DataAdapter があります。

#import <Foundation/Foundation.h>
#import "DataFileManager.h"
#import "DataManager.h"

@interface DataAdapter : NSObject <DataManagerProtocol>
{
    @private DataFileManager *_dataFileManager;
}

@property (nonatomic, strong) DataFileManager *dataFileManager;
- (id) initWithDataFileManager:(DataFileManager*) adaptee;
@end

@implementation DataAdapter

@synthesize dataFileManager = _dataFileManager;

- (id) initWithDataFileManager:(DataFileManager *) adaptee
{
    self = [super self];
    _dataFileManager = adaptee;
    return self;
}

- (void) saveFile
{
    [_dataFileManager savePlist];
}

- (void) readFile
{
    [_dataFileManager readPlist];
}

@end

次に、DataManager ファイルにメソッドを記述します。

- (void) saveTheTestFile:(id)forAdapter
{
    [forAdapter saveFile];
}

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

DataFileManager *dataFileManager = [[DataFileManager alloc] init];
DataAdapter *dataAdapter = [[DataAdapter alloc] initWithDataFileManager:dataFileManager];
[self saveTheTestFile:dataAdapter];

それは機能しますが、ここで何かが間違っていると思います-もっと簡単にする方法はありますか? 私は ARC を使用しておらず、多くの fileManager をリリースする必要があります。あまり良くないと思います。私はこのすべての方法で完全に混乱しました。私の場合、誰かがこのパターンをもっと面白くて簡単に実現できるでしょうか?ありがとうございました!

4

1 に答える 1