added factory, abstract factory, effective java