delegate design pattern