Add Composite Pattern
Add State Pattern