何时使用工厂方法



我知道这个问题已经被问了很多次,但我仍然有一个非常简单的问题,如果一个对象的初始化很简单,那么使用工厂方法的目的是什么。

Interface Animal{
eat();
}
class Dog implements Animal{
public void eat(){System.out.println("dog eat");}
}

假设我有一个具体的Cat类和fish类来实现Animal接口。

那么在这种情况下,有必要制作3工厂来创造动物吗?我认为我们只在初始化困难时使用工厂方法。

否。如果初始化困难,可以使用生成器模式。

工厂模式(工厂方法和抽象工厂(的目的是从抽象层中删除创建。如果在同一级别上有相关的类,这通常很重要。

例如:IHttpRequest->HttpRequestWithOnlyParsedHeaders->HttpRequestFullyParsed

第一个类可以在代理或转移请求时使用。在这种情况下,解析内容并为其分配对象是浪费资源

因此,当回复将被发送回来时,您不想手动创建响应对象,因为这会生成类似于的内容

if (request is HttpRequestWithOnlyParsedHeaders)
return new HttpResponseWithOnlyHeaders;
else 
return new HttpResponseWithContent;

该代码是脆弱的,只有在继承层次结构中引入新的类之后才能工作。

另一种选择是在IHttpRequest推断面中引入一个工厂方法:IHttpResposne CreateResponse()

这样,您就永远不需要更改任何现有的代码。任何新的实现都有责任创建正确的HTTP响应实现。

Builder和Factory都是"创造性的";图案。它们不同于以下事实:;建设者";本质上用于配置和返回对象实例。

工厂可以从外部获取依赖项,或者直接在Create((方法中获取依赖项(如果所有实现都通用的话(,并抽象掉对类构造函数的调用。

生成器将返回一个特定的类。工厂将返回接口,调用者将不知道实现是什么

最新更新