目的:
在工厂类中提供一个封装的静态工厂方法,用于隐藏对象初始化细节,使客户端代码可以专注于使用,而不用关心类的初始化过程。
工厂类是一个用于创建其他对象的对象 -- 从形式上看,工厂方法是一个用于返回不同原型或类型的函数或方法。
程序示例:
以生产汽车为例
1.汽车接口和实现类
public interface Car{
String getDescription();
}
public class Ferrari implements Car{
private static String DESCRIPTION ="This is Ferrari.";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
public class Ford implements Car{
private static String DESCRIPTION ="This is Ford.";
@Override
public String getDescription() {
return DESCRIPTION;
}
}
2.枚举类返回对象
public enum CarType{
FORD(Ford::new),
FERRARI(Ferrari::new);
private final Supplier<Car> constructor;
CarType(Supplier<Car> constructor) {
this.constructor = constructor;
}
public Supplier<Car> getConstructor(){
return this.constructor;
}
}
3.工厂类
public class CarsFactory{
public static Car getCar(CarType carType){
return carType.getConstructor().get();
}
}
测试输出
Car ferrari = CarsFactory.getCar(CarType.FERRARI);
Car ford = CarsFactory.getCar(CarType.FORD);
System.out.println(ferrari.getDescription());
System.out.println(ford.getDescription());
/*
This is Ferrari.
This is Ford.
*/
类图: