https://medium.com/pragmatech/junior-developer-niy%C9%99-design-patterns-%C3%B6yr%C9%99nm%C9%99lidir-9e8cb283a2d5