优势:
1.不必每次调用的时候创建新对象,可以返回原返回类型的子类型,有名称更容易阅读。
/**
* Created by kaizige on 2017/7/3.
*/
public interface Service {
public void doService();
}
/**
* Created by kaizige on 2017/7/3.
*/
public class ServiceImpl implements Service {
@Override
public void doService() {
System.out.println("hello");
}
}
/**
* Created by kaizige on 2017/7/3.
*/
public class ServiceFactory {
private static Service service;
public static Service getService(){
if(service==null){
service=new ServiceImpl();//或者可以传入类全名,使用反射构造.
}
return service;
}
}
2.在创建参数化实例的时候,使代码更简洁:
比如
HashMap<String,List<String>> map=new HashMap<String,List<String>>();
若使用工厂方法,则可以这样:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by kaizige on 2017/7/3.
*/
public class MapFactory {
public static <K,V> HashMap<K,V> newInstance(){
return new HashMap<K,V>();
}
public static void main(String[] args) {
HashMap<String,List<String>> map=MapFactory.newInstance();
List<String> list=new ArrayList<String>();
list.add("你好");
map.put("hello",list);
System.out.println(map.get("hello"));
}
}