No. You use the builder pattern if initialization is difficult.
The purpose of the factory pattern(s) (factory method and abstract factory) is to remove the creation from an abstraction layer. It's typically important if you have related classes on the same level.
For instance: IHttpRequest -> HttpRequestWithOnlyParsedHeaders -> HttpRequestFullyParsed
The first class can be used when proxying or diverting requests. In that case, it's a waste of resources to parse the content and allocate objects for it.
So when a reply is going to be sent back you do not want to create response object manually since that would generate something like:
if (request is HttpRequestWithOnlyParsedHeaders)
return new HttpResponseWithOnlyHeaders;
else
return new HttpResponseWithContent;
That code is fragile and only works until a new class is introduced in the inheritance hierarchy.
An alternative is to introduce a factory method in the IHttpRequest inferface: IHttpResposne CreateResponse()
.
That way, you will never have to change any existing code. Any new implementations are responsible for creating the correct HTTP response implementation.