vvs_rostov
Новичок
Исправьте. Использование шаблона Factory.
Здравствуйте.
Захотел применить теорию паттернов. Существует задача сводящаясь к созданию форм в зависимости от модели + у одной модели формирование формы зависит от доп. параметра.
На PHP реализовал все с оглядной на литература.
Создал фабрику с статистическим методом
где Form1, и т.д. реализуют необходимый интерфейс (в моем случае простой getForm).
Т.к. формирование Form2, например, зависит от параметра. Я добавил в данный класс этот параметр и добавил метод set для его установки. Т.е. для получения формы Form2 я :
Вариант рабочий. Но после очередного просмотра прихожу что PHP позволяет мне это, т.к. не является строго типизированным. По сути $form - переменная реализующая интерфейс с единственным методом getForm(). И в Java такое бы не прошло , например. Как элегантно решать даную проблему?
Спасибо.
-~{}~ 12.10.08 17:43:
P.S.
На ум приходит заменить интерфейс, котрый должен реализовывать каждый класс форм (абстрактным классом с абстрактным методоми getForm и пустым методом setId(). ) И в соответвующем классе пустой метод переопределить , в других - оставить ве как есть. Но по моему это не особо привлекательное (а значит и практичное - часто натыкаюсь что красота кода соответвует практичности). Хотелось бы получить какие-то подсказки.
Здравствуйте.
Захотел применить теорию паттернов. Существует задача сводящаясь к созданию форм в зависимости от модели + у одной модели формирование формы зависит от доп. параметра.
На PHP реализовал все с оглядной на литература.
Создал фабрику с статистическим методом
PHP:
class AdminFactory{
public static function createForm($model){
switch($model){
case 'model1':{
$ret = new Form1();
break;
}
//.......
}
}
}
Т.к. формирование Form2, например, зависит от параметра. Я добавил в данный класс этот параметр и добавил метод set для его установки. Т.е. для получения формы Form2 я :
PHP:
$form = Factory::createForm($model);
$form->setId($pid);
Спасибо.
-~{}~ 12.10.08 17:43:
P.S.
На ум приходит заменить интерфейс, котрый должен реализовывать каждый класс форм (абстрактным классом с абстрактным методоми getForm и пустым методом setId(). ) И в соответвующем классе пустой метод переопределить , в других - оставить ве как есть. Но по моему это не особо привлекательное (а значит и практичное - часто натыкаюсь что красота кода соответвует практичности). Хотелось бы получить какие-то подсказки.

но ты как то странно все делаешь, через публикацию свойств (setId итд), это конечно все будет нормально работать, и я бы ничего и не сказал если бы разговор не шел о концептуальной правильности =) ну так вот если мы все такие объектные то по хорошему объекты должны меняться объектами, точнее указателями на них (ну или на самих себя) и дергать методы, а не передавать друг другу свои свойства.