Показать сообщение отдельно
Старый 12.08.2013, 17:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
какой-то ужас написали... ладно, названия классов и методов перепутаны, я еще могу как-то сопоставить. Но оверрайд не может быть с другой сигнатурой
Цитата:
"обычная фабрика", это класс, экземпляр которого мы по прежнему не создаём.
Создавайте, кто ж мешает. Я для простоты привел пример со "статическим" классом, точнее, пример класса фабрики со статическим методом. Но это же абсолютно не принципиально. Для обычной фабрики.
А вот абстрактная тем и отличается, что её экземпляр создать невозможно, потому что он абстрактный. (в моем примере Фабричного метода это был бы интерфейс ЯЗавод. Вы ведь не можете создать экземпляр интерфейса?). Вы создаете экземпляры классов-наследников, и используете их, подставляя нужный. ОК, давайте простой пример. Шахматы. Есть белые и черные фигуры. Есть Абстрактная фабрика с шестью методами, создающими экземпляры фигур — коня, короля, ферзя и т.д. И два класса-наследника, белая фабрика и черная фабрика. Ваше приложение знает ТОЛЬКО абстактную фабрику, у которой можно запросить коня или ладью. Оно не знает, будет конь белым или черным. Или серобуромалиновым в крапинку. Кто-то свыше устанавливает режим "белый", и место абстрактной фабрики занимает конкретная Белая фабрика, которая может отдавать только белых коней и королей. Вот и весь фокус. Это всего-лишь обычный полиморфизм. Клиент не знает, с каким конкретно классом работает, потому что работает с абстрактным суперклассом или интерфейсом. И какой конкретный класс будет производить набор фигур, решается в другом месте. В этом суть паттерна Абстрактная Фабрика. Похоже это хоть чем-то на обычный класс, производящий экземпляры? Смотреть то надо не на результат, а на решаемую задачу. А задачи у них абсолютно разные.
__________________
Reality.getBounds(this);