In 1994, a group of developers wrote a book called Design Patterns: Elements of Reusable Object Oriented Software (Boston: Addison-Wesley , 1994), 1 wherein they explored the pros and cons of object-oriented software engineering. This group of developers, commonly referred to as “The Gang of Four” or “GoF ,” identified common software engineering problems and how object-oriented programming (OOP) could be used to solve those problems. The book refers to these solutions as design patterns, some of which can be seen in Figure