PDA

Просмотр полной версии : Общение классов, передача параметров


ir73
18.02.2006, 20:38
Хотел узнать кто как справляется с такой проблемой (или задачей).

Есть, например, карточный стол (назовем CardTable class). Требуется раздать карты (Cards class). Когда карты будут розданы, требуется запустить определенную функцию в классе CardTable). Каждый раз эта функция разная (нарпимер после первой раздаче карт требуется запустить ф-цию cardHandFinished, а после воторой - endGame, и так далее). При чм не просто запустить функцию, а еще и передать ей параметр из класса Cards. Интересует кто как справляется с этой задачей.

Antares
18.02.2006, 20:41
Паттерн Front Controller.

Делаешь ряд команд (действий, которые различаются). Сдаешь карты, по окончанию выбираешь, что вызывать, отдаешь в виде строки методу. Он вызывает соответствующую команду (создает ее экземпляр, отдает ей параметр, если надо, и запускает методом execute).

ir73
18.02.2006, 20:48
то есть вся логика, кого вызвать после сдачи, должа быть в классе Card ? Этого бы не очень хотелось.

А что за метод execute? В хелпе не нашел

Antares
18.02.2006, 20:51
Пардон, вы бы почитали про паттерн-то. Логика должна быть в первичном контроллере. Команды -- это кусочки логики, они нужны для того, чтобы не держать в классе слишком много одновременно, если все равно все разом не понадобится.

В хелпе этого метода вы и не найдете. Потому что паттерны основаны на ролях. А роли -- это понятие абстрактное. Классы в паттернах могут называться как угодно, главное сохранить механизм их взаимодействия.

ir73
18.02.2006, 20:54
пока что ничего не понял. Буду про паттерны читать. Если подскажете, где более наглядно это описано, был бы премного благодарен. Спасибо

ir73
18.02.2006, 20:55
скажу сразу, что до селе обходился так. CardTable запускал в классе Card функцию сдачи, и вместе с тем передавал ей в виде параметра функцию, которую надо запустить потом. Параметры при этом передавать особо не удавалось (.

ir73
19.02.2006, 15:09
поизучал Fron Controller

Как я понял его, касаемо флеш:
1. После раздачи карт вызывается всегда один и тот же метод (напр. frontController), которому передается параметр-состояние (напр. "cardHandFinished" или ""endGame", если брать мой пример).
2. Method frontController по парамету смотрит, что ему вызвать и вызывает.

Передать параметры от Card в CardTable таким образом можно так : frontController.call(CardTable, params)

Поправьте меня. пожалуйста, если я где не прав.

Antares
19.02.2006, 15:16
Начнем с того, что по логике управлять сдачей должен не стол, а некий контроллер.
Ну, допустим, у вас просто так нелепо назван этот самый контроллер. СДача -- это команда. Все остальные действия после сдачи -- тоже.

1. Сдаем. var lastLayout : Layout = this.layCardsOut();
2. Принимаем решение, что делать. checkCardsSet( lastLayout );
3. Внутри checkCardsSet решаем, что вызывать. Делаем экземпляр команды и и сполняем ее


var numberOfQueens : layour.getQueens().length;
switch( numberOfQueens )
{
case 3:
var command : StayCommand = new StayCommand();
command.execute(); // здесь выполняются действия, гласящие, что новых карт мы не берем
break;
case 1:
var getMore : getMoreCommand = new getMoreCommand();
getMore.execute();
break;
}


4. Все. Карта в подобном случае вообще должна быть тупым хранилищем данных о старшинстве и масти, то есть Value Object.

ir73
19.02.2006, 20:03
спасибо, весьма позновательно. Постяраюсь извлеч максимум из этого способа.