design pattern -- creational pattern