make destructor of base class virtual
& template design pattern
& simple factory pattern
underline design patterns