Переопределение в подклассе после проверки логического значения - PullRequest
0 голосов
/ 24 января 2012

Я планирую переопределить метод в подклассе, если логическое значение установлено на определенное значение, а затем переключить это значение и подумать о двух вариантах:

1.Вызов супер и проверка успеха

// Superclass
-(BOOL) showEngine
    BOOL result = !self.isEngineActive;
    if (result) {
        // Does something common to both super and subclass
        self.isEngineActive = YES;
    }
    return result;
}

// Subclass override
-(BOOL) showEngine
    BOOL result = [super showEngine];
    if (result) {
        // Does something unique to subclass
    }
    return result;
}

2.Делегат для второго метода

// Superclass
-(void) showEngine
    if (!self.isEngineActive) {
        // Delegate
        showEngineNow();
        // Does something common to both super and subclass
        self.isEngineActive = YES;
    }
}

// Subclass override
-(void) showEngineNow() {
    [super showEngineNow];
    // Does something unique to subclass
}

Первый метод отрицательно влияет на необходимость вызова super и проверки результата, тогда как второй имеет отрицательный багаж вызова второго метода для делегата.Какой был бы лучший способ, и есть ли один, о котором я не думал?

1 Ответ

1 голос
/ 24 января 2012

негативный эффект от необходимости звонить супер

Вызов супер реализации довольно распространен при переопределении метода. Я не вижу в этом негатива. Из вопроса неясно, что вы пытаетесь достичь, но я бы выбрал вариант 1 - зачем вводить больше сложности?

Это предполагает, что неуказанный //stuff, который вы делаете в супер реализации, также должен быть сделан подклассом. Если нет, вам нужно будет разделить на отдельные методы.

Я не думаю, что вы используете "делегат", как это предусмотрено в Какао. Если это просто другой метод в том же классе, это не делегат. Делегат - это отдельный объект, который соответствует известному протоколу.

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

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