Как создать хороший универсальный API для построения строк?

В наших приложениях мне часто нужно загружать изображения для таких элементов пользовательского интерфейса, как кнопки. Есть несколько вариантов каждого изображения, например, пейзаж / портрет, отключено / включено, нажата / обычная и даже цвета, такие как белый / красный / серый. Код загрузки имеет несколько переменных, которые сообщают ему, какой вариант загружать. В качестве примера рассмотрим следующий пример класса кнопок:

enum {
    SampleImageButtonRed,
    SampleImageButtonWhite
} SampleImageButtonStyle;

@interface SampleImageButton : NSObject
@property(assign) SampleImageButtonStyle style;
@property(assign) BOOL landscape;
@property(assign) BOOL disabled;
@property(assign) BOOL pushed;
@end

Здесь код загрузки должен посмотреть на свойства и загрузить button_white_pushed.png, button_red_landscape.png и так далее, в зависимости от типа кнопки. Код концептуально прост (только некоторое форматирование строки и [UIImage imageNamed:] звонки), но в то же время много шума и шаблонов.

Я пытался придумать простой вспомогательный класс, который бы облегчил это. Класс будет принимать правила, сопоставляющие свойства с результирующим именем изображения, затем он будет получать действительные значения свойств и возвращать соответствующее изображение. Что-то вроде:

ImageBuilder *builder = [[ImageBuilder alloc] init];

[[[builder record] setPathTag:@"button_red"] setButtonStyle:SampleImageButtonRed];
[[[builder record] setPathTag:@"button_white"] setButtonType:SampleImageButtonWhite];

[[[builder record] setPathTag:@"disabled"] setDisabled:YES];
[[[builder record] setPathTag:@"enabled"] setDisabled:NO];

[[[builder record] setPathTag:@"landscape"] setLandscape:YES];
[[[builder record] setPathTag:@"portrait"] setLandscape:NO];

И тогда я бы назвал что-то вроде этого:

// would load “button_red_enabled.png”
UIImage *texture = [[[builder image]
    setButtonStyle:SampleImageButtonRed]
    setDisabled:NO];

В данный момент меня не интересует, стоит ли дополнительная сложность, меня интересует дизайн и реализация API. Я думаю, что API записи может работать, а API запросов - нет, так как setButtonStyle: возвращается void и, следовательно, я не могу связать звонки или вернуть изображение.

У вас есть идеи для хорошего общего API для этой проблемы, которая может работать?

0 ответов

Другие вопросы по тегам