Если он был объявлен защищенным, я
мог бы просто расширить класс,
и переопределить эту переменную. Но
так как это было частным, мне пришлось скопировать
весь код из класса и создать
дубликат класса с единственным
Разница в том, что строка.
И если бы существовал установщик для местоположения изображения, вам бы вообще не понадобился подкласс (или новый класс).
И если вместо того, чтобы менять образ, вам нужны другие незначительные изменения, то, возможно, может помочь создание какого-то другого защищенного / виртуального API. Или, возможно, нет. Единственное, что я могу сказать, это то, что трудно сразу взглянуть на туманный пример и извлечь из него общую мудрость.
Существует компромисс между степенью гибкости, которую дает вам класс с точки зрения его поведения и расширяемости, и того, сколько усилий требуется для разработки и тестирования класса (и дальнейшего взаимодействия между тем, насколько это понятно, хорошо задокументировано и т. Д.). класс есть). Эти компромиссные решения по проектам не могут быть оценены в вакууме, скорее они должны оцениваться в контексте. Насколько вероятны различные функции / поведения / расширения / изменения, которые класс может возможно поддерживать на самом деле ? Хорошо разработанный класс - это класс, который имеет расширения для распространенных необходимых сценариев и не содержит ненужных расширений и API. (А для имеющихся расширений есть выбор между простыми «установщиками» и более сложными расширяемыми защищенными / виртуальными / подклассами ... последнее не является компромиссом, к которому можно легко перейти.)
Я не знаю, что это отвечает на ваш конкретный вопрос хорошо (или вообще), но то, как я прочитал ваш вопрос, заставило меня почувствовать, что вы намекаете, что "классам лучше быть швейцарскими армейскими ножами потому что расширяемость / настраиваемость это хорошо ", и я хотел сказать, что эти" хорошие "вещи идут с компромиссами. Кроме того, ваш вопрос, казалось, подразумевал, что эта ситуация была о «частном» и «защищенном» и «подклассе», тогда как я думаю, что простой «метод установки» был бы достаточным изменением API.