Objective c objective C中的生成器模式
我遇到了一个设计模式“Builder”,我认为它非常适合我想做的事情。在我的iOS应用程序中,我有不同的核心数据实体,我希望能够将我的对象转换为不同的数据格式。目前,我的计划是支持XML、HTML和JSON。因此,我一直在考虑使用标准设计模式(如“Builder”)来设计此解决方案。我的一些问题是Objective c objective C中的生成器模式,objective-c,design-patterns,data-formats,Objective C,Design Patterns,Data Formats,我遇到了一个设计模式“Builder”,我认为它非常适合我想做的事情。在我的iOS应用程序中,我有不同的核心数据实体,我希望能够将我的对象转换为不同的数据格式。目前,我的计划是支持XML、HTML和JSON。因此,我一直在考虑使用标准设计模式(如“Builder”)来设计此解决方案。我的一些问题是 对于这个问题,生成器模式是正确的吗 我可以在目标C中使用此模式吗?由于objc中没有抽象类的概念,所以不知道如何处理这个问题。我想我应该使用一个基类和一个协议来定义我的抽象方法 请随时提出最适合我需要
编辑:另一个关键点是最终格式将由不同的核心数据实体组成。例如,如果存在实体team和player,我需要创建同时使用team和player的数据格式。您可以使用类别来扩展对象的行为 例如,如果要将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]);
一些参考资料:
是的,Builder模式听起来是解决这个问题的好方法。构建器背后的思想是,整个构建过程在所有数据格式中都是一致的,但构建细节是不同的
2) 是的,生成器模式可以在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];
}
}
你好,jsmp,谢谢你的建议。我想我在问题描述中遗漏了一个关键点。我的最终目标是创建一个使用多个核心数据实体的复杂对象。例如,如果有一个实体团队&玩家,我想创建一个包含所有玩家的团队表示。这可能会有帮助,谢谢Daniel。简单说明一下,ConcreteBuilder类将实现Builder协议,对吗?是的,所有ConcrenteBuilder都将实现Builder协议。创建代码的最佳方法是在构建主管的同时构建一个混凝土构建者,同时关注所有建筑方案的共同点。(导演中有一些常见的东西。)一旦你开始工作,那么制作另外两个混凝土工应该很容易。