Factory Method
The factory method design pattern allows you to create objects without being bothered on what is the actual class being created.  The benefit is that the client code(calling code) can just say "give me an object that can do XYZ" without knowing what is the actual class that can do "XYZ".

Let's see an example. Let’s say you own an online bookstore and people come to your website to buy books.  When a customer orders a book you just have another book distributor send the book directly to the customer. You are a middle man and you don’t stock the books. You have many distributors that you can choose to send the books directly to your customers.