应用场景
工厂模式,英文名Factory Pattern
该模式通过专门的接口或类来创建对象,而不是直接new出对象
使用这种模式的原因一般主要有以下几种
- 想要屏蔽产品的构建细节,不想让用户考虑太多
- 通过一个工厂类,对多种产品进行集中构建,这样代码更统一,修改起来也方便
工厂模式根据具体应用场景和业务复杂度,也有多种形式的实现方式
实现一
最简单的情况,直接通过工厂类生产商品
public class Product {
//构造方法使用protected权限,这样只有同包名的类可以调用该构造方法
//由于工厂类和产品类同包,所以工厂类可以创建产品,用户则无法手动创建
protected Product() {
}
}
public class Factory {
public static Product createProduct() {
return new Product();
}
}
实现二
工厂类和产品类都有多个子类,每个工厂子类负责生产一种产品
//产品类
abstract public class Product {
}
//工厂类
abstract public class Factory {
abstract public Product createProduct();
}
public class ProductA extends Product {
}
public class ProductB extends Product {
}
//用于创建产品A的工厂类
public class FactoryA extends Factory {
@Override
public ProductA createProduct() {
return new ProductA();
}
}
//用于创建产品B的工厂类
public class FactoryB extends Factory {
@Override
public ProductB createProduct() {
return new ProductB();
}
}
实现三
产品类本身又充当工厂类的角色
public class Product {
private Product() {
}
public static Product create() {
return new Product();
}
}
实现四
工厂可以生成多种类型的产品,并且每种类型的产品都是单例的
public class Product {
private static Map products = new HashMap();
private Product() {
}
synchronized public static Product get(String type) {
if (!products.containsKey(type))
products.put(type, new Product());
return products.get(type);
}
}