目标C中的生成器模式

| 我遇到了一个设计模式“ Builder”,该模式非常适合我想做的事情。在我的iOS应用程序中,我具有不同的核心数据实体,并且我希望能够将对象转换为不同的数据格式。目前,我的计划是支持XML,HTML和JSON。因此,我一直在考虑使用“ Builder”之类的标准设计模式来设计此解决方案。我的一些问题是 生成器模式是否适合此问题? 我可以在Objective C中使用这种模式吗?由于Obj C中没有抽象类概念,因此不确定如何处理。我想我应该使用基类和协议来定义我的抽象方法。 请随时提出最适合我需要的任何新设计解决方案。 非常感谢您的建议和评论。 问候, 贾维德 编辑:另一个关键点是最终格式将由不同的核心数据实体组成。例如,如果有一个实体团队和参与者,我需要创建一个同时使用团队和参与者的数据格式。     
已邀请:
1)是的,Builder模式听起来像是解决此问题的好方法。 Builder的想法是,所有数据格式的总体构建过程都是一致的,但是构建细节不同。 2)是的,可以在目标C中使用Builder模式。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];
    }
}
    
您可以使用类别来扩展对象的行为。 例如,如果您想将功能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/     

要回复问题请先登录注册