add abstract factory model
implement abstract factory
Originator