My own implementations of different design patterns