oo, add abstract factory
oo, abstract facotry, without binary