The Factory design pattern allows us to make objects without specifying the exact class of the object that will be created and at the same time keep the privacy of the code (by allowing us to encapsulate object creation) from the client/user. From what I have understood, factory pattern is useful when the developer does not initially know the type of objects that need to be created, we use the Factory design pattern when we want to define the class of an object at runtime. A good example would be creating a game where new characters might need to be added later to add to the game. It uses a shared interface, which can be used by the client to establish new types of objects. The main goal of this design pattern is to provide users/clients with an interface for creating new objects in a superclass. The factory design pattern allows the sub-classes to choose the type of objects it wants to create. The video was very helpful in understanding the working of factory design patterns. I noticed how the objects that were returned from the factory methods were referred to as “products”. The client is introduced to EnemyShipFactory which is the factory, which in turn uses an abstract class called EnemyShip. From EnemyShip, implementation is provided to UFOEnemyShip and RocketEnemyShip class.