strategy, templatemethod,visitor