constructor pattern
module pattern