When a consumer of the PSR needs to create a request or response object without knowing how the concrete implementation implemented their request and response constructors. It allows the creation of request and response objects to be standardized so that consumers do not need to code for specific vendors.

An example. Let's say someone released a document database library for CouchDB that needed an HTTP client. The CouchDB library wants only a dependency on PsrHttpMessage (or whatever we call it) and does not want to code various creational methods for the constructors of all possible implementations of the PSR. Instead, they can just do something like the following:

```php
function sendRequest(Psr\Http\Message\MessageFactoryInterface $factory, ... $other params...) {
    $message = $factory->create('GET', '/');
    // send the message
}
```