bridge или все таки не мост
От: sapunidze Россия  
Дата: 10.11.03 14:15
Оценка:
Имеется абстрактный класс Document, его необходимо отобразить в виде некой абстрактной формы, скажем, DocumentForm. Document имеет два конкретных воплощения — входящий документ (InDocument) и исходящий документ (OutDocument). Отображаться необходимо на InDocumentForm и OutDocumentForm, соответственно.
Насколько я понял, идея отрыва абстракции от реализации заключается в том числе и в том, что про связь между ними знает только абстракция (причем "абстрактная" абстракция, т.е. базовый класс). Потомки же используют декларированные методы в базовом классе для доступа к фактической реализации (т.е. сами они про реализацию не в курсе).
Если предыдущий абзац не заблуждение, возникает следующий вопрос.
Допустим, я трактую как абстракцию — DocumentForm, а в качестве "утонченной" абстракции — InDocumentForm, реализация — Document, конкретная реализация — InDocument.
Как мне быть с тем, что InDocument имеет дополнительные поля, соответственно методы для доступа к ним, которых нет в Document? (Либо DocumentForm, либо InDocumentForm должен знать про InDocument)
Помогите разобраться, целесообразно ли использовать в данном случае шаблон мост? И как следует поступать если наследники не только конкретизируют базовый класс но и расширяют его функциональность (дело попахивает dynamic_cast<>)

з.ы.
class Document{
...
Load() { LoadFromDB() }
Save() { SaveToDB() }
...
}

class DocumentForm{
...
DocumentForm(int id) { document = new Document(id) }
OnShow() { document->Load() ... }
OnButtonSaveClick { document->Save() }
...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.