abstract pattern: add new kind of product