工厂设计模式包含:简单工厂、工厂方法、抽象工厂。本文只对工厂方法、抽象工厂做介绍
1、工厂方法设计模式
1.1、简单举例
使用简单工厂设计模式,会将所有的创建都写在create当中。既不满足开闭原则,如果对象创建的过程很复杂,也会使得该方法越来越复杂。这时就可以使用工厂方法设计模式来优化代码。
1.2、对工厂方法的简单理解
如果需要创建各种品牌的汽车。就可以为不同品牌的汽车抽象一个工厂创建对应品牌的汽车,再统一实现汽车工厂接口
工厂有自己的抽象和实现,工厂创建的产品(对象)也有自己的抽象和实现
1.3、代码案例
1、抽象一个工厂
// ResourceLoaderFactory则为:工厂有自己的抽象和实现
public interface ResourceLoaderFactory {
// AbstractResource 则为:工厂创建的产品(对象)也有自己的抽象和实现
AbstractResource createResource(String url);
}
2、创建不同对象的工厂实现该接口并单独创建
public class ClassPathResourceLoader implements ResourceLoaderFactory{
@Override
public AbstractResource createResource(String url) {
return new ClassPathResource();
}
}
public class HttpResourceLoader implements ResourceLoaderFactory{
@Override
public AbstractResource createResource(String url) {
return new HttpResource();
}
}
3、调用工厂创建实体类
public class ResourceFactory {
// 将工厂缓存起来
private static Map<String, ResourceLoaderFactory> factoryCache = new HashMap();
static {
factoryCache.put("www.baidu.com", new HttpResourceLoader());
factoryCache.put("www.taobao.com", new ClassPathResourceLoader());
}
public static void main(String[] args) {
AbstractResource abstractResource = create("www.taobao.com");
System.out.println(abstractResource.getClass().getName());
}
public static Resource create(String url) {
return factoryCache.get(url).createResource(url);
}
}