basic design pattern examples