design pattern completed