gang of four design patterns in python