design pattern introduction