Proszę o ocenę designu poniższych klas:
class Frame_pool {
public:
virtual ~Frame_pool()
{
}
};
class Video_frame_pool : public Frame_pool {
public:
int pixel_format;
int get_pixel_format()
{
return pixel_format;
}
};
class Audio_frame_pool : public Frame_pool {
public:
int bit_depth;
int get_bit_depth()
{
return bit_depth;
}
};
class Frame {
public:
Frame_pool *pool;
};
class Video_frame : public Frame {
public:
int get_pixel_format()
{
Video_frame_pool *v_pool = dynamic_cast<Video_frame_pool *>(pool);
return v_pool->get_pixel_format();
}
};
class Audio_frame : public Frame {
public:
int get_bit_depth()
{
Audio_frame_pool *a_pool = dynamic_cast<Audio_frame_pool *>(pool);
return a_pool->get_bit_depth();
}
};
Założenia designu są następujące:
- wszystkie ramki z danej puli przechowują dane o tych samych parametrach, stąd pola takie jak pixel_format umieściłem w klasie Video_pool, a nie Video_frame.
- obiekty korzystające z ramek nie posiadają bezpośredniej referencji do obiektu puli, stąd obiekt ramki posiada metodę do zwracania poszczególnych parametrów.
- widoczność poszczególnych pól jest przykładowa - dla uproszczenia ustawiłem wszystko na public.
Jedyne co mi się nie podoba w powyższym designie to konieczność wywoływania dynamic_cast. Chciałbym tego uniknąć, bo brzydko to wygląda tylko nie bardzo wiem jak zmienić design, aby się tego pozbyć i jednocześnie zachować wyżej wymienione założenia. Stąd też proszę o pomoc.