Re[3]: Присвоение свойств и вызов виртуального метода из констр
От: sharez  
Дата: 15.11.16 09:05
Оценка:
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, netch80, Вы писали:


N>>Там, где можно вызвать конструктор в виде явного конструктора, можно вызвать и что-то вроде public static Button make(), которое само вызывает конструктор (возможно, объявленный private, чтобы не показывать незавершённое состояние), вызывает нужные методы и возвращает готовый результат. Такой себе конструктор, не выглядящий синтаксически как конструктор. (В родной библиотеке Java есть множество методов с неинтуитивным названием valueOf(), которые делают что-то похожее.) После этого специфика потрохов будет скрыта только внутри данного класса и его потомков, которые должны будут отразить специфику такого формирования у себя, но не у пользователей.

C>А по моему это называется Фабрика? Не?

C>Ну в том смысле что конструктор у нас private, и никак создать объект, кроме как этим фабричным методом не выйдет. А он де факто берет на себя помимо создания еще и всю нужную дополнительную инициализацию...


Похоже, что фабрика здесь хороший способ сокрыть реализацию, потому что в случае такой иерархии:

Button < CustomColorButton < CustomColorButtonWithSomeOtherFeature

CustomColorButtonWithSomeOtherFeature получил бы два статических метода create(), один из которых ему как козе боян.



Но есть нюанс. Если мы хотим дать программисту (или 3-rd parties) наследоваться от Button, то нам обязательно придется ему вталдычить, чтобы он не забывал вызывать fill() после создания своей кнопки. А это печаль в некотором роде, потому что программистам обязательно захочется отнаследоваться для случая

Button < ToolbarButton

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