![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Не могу разобраться с примером применения шаблона фабрика.
В файле IProduct.as определен интерфейс: Ухожу в ступор при виде таких строчек: var product:IProduct = this.factoryMethod();
...
protected function factoryMethod():IProduct {
...
кроме двух случаев: работающий пример в аттаче |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Что именно Вы не можете понять, зачем в природе существуют интерфейсы? Или зачем нужна фабрика?
То, что несколько классов соответствуют один и тот - же интерфейс значит то, что они соответствуют определенному типу данных. А тип - же данных, в свою очередь, является спецификаций того, какие операции можно производить над объектом данного типа. Т.е если у вас два объекта разных классов, но эти самые классы соответствуют одному интерфейсу, то над данными объектами можно производить те операции, которые указаны в интерфейсе причем над тем какой класс имеет данный объект Вы не задумываетесь. Пример, немного надуманный, но отражает суть: у вас есть два класса, часы и робот, оба не имеют предков, но соответствуют интерфейсу "Ходящие". У вас есть массив для всех элементов находящихся в приложении, и по всему массиву вы идете циклом и вызываете их операцию "идти". Т.е. у вас нет необходимости использовать абстрактный класс "ходящие", а это важно потому, что робот может еще и стрелять. p.s. Почитайте банду четырех лучше, или "Thinking java in pattern" Брюса Эккеля, там все примеры жизненные Последний раз редактировалось VovkaMorkovka; 07.12.2007 в 15:47. |
|
|||||
|
ВладимирМорковь, большое спасибо за проявленное участие и внимание к моему вопросу!
Да, данная проблемма меня инетерует во всех аспектах. Но впервую очередь, конечно же, хотелось бы услышать ответ в контексте первой части Вашего поясняющего вопроса |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Еще раз, что конкретно не понятно?
|
|
|||||
|
Цитата:
Не понятно как объект может иметь тип интерфеса. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Может иметь такой тип.
Существущие методы должны быть описаны в интерфейсе, чтобы с ними можно было работать. |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Цитата:
Это означает, что методы интерфейса должны быть реализованы в класе который имплементит данный интерфейс. Т.е. если есть два класса A и B которые имплементят интерфейс IThomething то можно написать так И в дальнейшем использовать описанные в интерфейсе методы объектов a и b не заморачиваясь тем, что эти объекты принадлежат к разным классам. |
|
|||||
|
Спасибо, более менее понятно.
Такой вот дополнительный вопрос: когда мы объявляем переменную, какие действия выполняет компилятор (выделяет память еще что-то) при создании переменной в зависимости от ее типа. Вот, например, если: var variable:Number // выделяется ячейка памяти фиксированного размера, по коду идет проверка на соответствие типа var variable:int // то же что и выше но фиксированная ячейка системной памяти меньше var obj:ClassA // ? var obj:Interface //? А когда в роли типа выступает класс то еще происходит выделение памяти. |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Компилятор выделяет память когда вы СОЗДАЕТЕ переменную, а не при объявлении. Не путайте объявление переменной и создание.
|
|
|||||
|
То есть, в любом случае, указание типа это только для удобства программиста?
Для компилятора и плеера все равно напишу я так или так ? |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|