我知道这个问题已经被问了很多次,但我仍然有一个非常简单的问题,如果一个对象的初始化很简单,那么使用工厂方法的目的是什么。
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((方法中获取依赖项(如果所有实现都通用的话(,并抽象掉对类构造函数的调用。
生成器将返回一个特定的类。工厂将返回接口,调用者将不知道实现是什么。