add decorator demos
reformat code
add simple factory, factory method, abstract factory