1. the LivinGrimoire AGI software design pattern : all purpose
  2. builder : used to return the object after setting an attribute
  3. adapter: absursb a class's functionality into another class with different structure
  4. singleton : used for objects with only one instantiation in the program
  5. flyweight : saves storage space by using shallow references to attributes