JavaPatterns Behavioral command interpreter memento observer state template method visitor Structural adapter bridge composite decorator Creational prototype