Преобразование enum в класс, но не знаете, какой шаблон использовать? - PullRequest
1 голос
/ 12 июля 2011

Я относительно новичок в 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 Ответ

1 голос
/ 12 июля 2011

Не зная больше, есть два подхода, которые звучат так, как будто они могут иметь смысл:

  1. Превратите MapTileTypes в подклассы MapTile, которые реализуют искомое поведение, которое вы ищете.

  2. Создайте класс MapTileBehavior или что-то в том же духе, и экземпляры этого класса будут заменять ваши значения MapTileTypes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...