http://design-pattern.ru/martin-fowler.html