将枚举转换为类,但不确定使用什么模式?

时间:2011-07-12 15:23:59

标签: objective-c design-patterns delegates

我对Objective-C比较新,我有一个带有相应数组字符串描述的枚举:

typedef enum {
    kCoverage = 0,
    kSingulation,
    kPopulation,
    kDownforce,
} MapTileType;

static NSString* const kMapTileTypeString[] = {
    [kCoverage] = @"Coverage",
    [kSingulation] = @"Singulation",
    [kPopulation] = @"Population",
    [kDownforce] = @"Downforce",
};

我发现我实际上需要为地图图块的“类型”定义行为。例如,我有一个适用于特定类型的地图图块的图块渲染行为。

static RenderingStrategy* const kMapTileTypeRenderingStrategy[] = {
    [kCoverage] = ...,
    [kSingulation] = ...,
    ...
};

我想知道所有这些东西是否更适合用于封装目的的类定义。或者我只使用接收MapTileType的工厂方法并返回RenderingStrategy

我在想,我也许也可以只使用代表:

@protocol MapTileDelegate <NSObject>
-(NSString*)description;
-(void)renderBlahBlah...;
@end

有人可以帮助打破我的分析瘫痪吗? :)

1 个答案:

答案 0 :(得分:1)

在不知道更多的情况下,有两种听起来有意义的方法:

  1. 将MapTileTypes转换为MapTile的子类,以实现您正在寻找的自定义行为。

  2. 沿着这些行创建一个MapTileBehavior类,并让该类的实例取代MapTileTypes值。