first commit, patterns on factory method, abstract factory, observer, decorator, singleton