strategy pattern — design pattern enabling selection of algorithms at runtime