this is behavioral design pattern example