Шаблон строителя в задаче C - PullRequest
1 голос
/ 21 апреля 2011

Я наткнулся на шаблон проектирования «Строитель», который, я думаю, хорошо бы соответствовал тому, что я хотел бы сделать. В моем приложении для iOS у меня есть разные базовые объекты данных, и я хотел бы иметь возможность преобразовывать мои объекты в разные форматы данных. В настоящее время я планирую поддерживать XML, HTML & JSON. Итак, я думал о разработке этого решения с использованием стандартного шаблона проектирования, такого как «Builder». Некоторые из моих вопросов

  1. Является ли шаблон Builder правильным для этой проблемы?
  2. Могу ли я использовать этот шаблон в Objective C? Поскольку в Obj C нет понятия абстрактного класса, не знаю, как к этому подойти. Я думаю, что я должен использовать базовый класс и протокол для определения моих абстрактных методов.

Пожалуйста, не стесняйтесь предлагать любые новые дизайнерские решения, которые наилучшим образом соответствуют моим потребностям.

Большое спасибо за ваши предложения и комментарии.

С уважением, Джавид

Отредактировано: Еще один ключевой момент - окончательный формат будет состоять из различных основных объектов данных. Например, если есть команда сущностей и игрок, мне нужно создать формат данных, который использует команду и игрока.

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

1) Да, шаблон Builder звучит как хорошее решение этой проблемы. Идея, лежащая в основе Builder, заключается в том, что общий процесс сборки одинаков для всех форматов данных, но детали сборки различны.

2) Да, шаблон Builder можно использовать в Objective C. Директор и различные классы ConcreteBuilder будут обычными классами, а абстрактный класс Builder будет протоколом, который использует Директор, если он представлен все.

У вас может получиться что-то вроде этого в директоре:

@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];
    }
}
1 голос
/ 21 апреля 2011

Вы можете использовать Категории , чтобы расширить поведение объектов. Например,

, если вы хотите добавить возможность stringJSON в NSDictionary, вы можете сделать следующее:

NSDictionary + JSON.h:

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

NSDictionary + JSON.m

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

Теперь в любом .m файл, который вы хотите использовать этот новый метод на ваших NSDictionary объектов, вы включаете категорию

#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/

...