constructor pattern, add demo