template method pattern
composite pattern
proxy pattern
state pattern