简单工厂:使用if-else的方式根据不同的类型参数创建不同的实现类
工厂方法:利用多态将简单工厂中if-else的实现逻辑替换掉。符合开闭原则,对修改关闭,对扩展开放
但是工厂方法中工厂类的创建又会耦合在代码逻辑中,可以利用简单工厂的方式为工厂类创建一个工厂类,使用静态代码段的形式初始化一个map
public interface IFactory {
AbstractBusinessService createBusiness(String type);
}
public class ABusinessFactory implements IFactory {
ABusiness createBusiness(String type) {
return new ABusiness();
}
}
public class BBusiness implements IFactory {
BBusiness createBusiness(String type) {
return new BBusiness();
}
}
public static void main() {
static Map<String, IFactory> businessFactoryMap = Maps.newHashMap();
static {
businessFactoryMap.put("A", new ABusinessFactory());
businessFactoryMap.put("B", new BBusinessFactory());
}
}
抽象工厂
在工厂方法的基础上可以扩展,一个Factory可以创建多个Business
public class ABusinessFactory implements IFactory {
A1Business createAABusiness(String type) {
return new A1Business();
}
A2Business createAABusiness(String type) {
return new A2Business();
}
}
public class BBusiness implements IFactory {
B1Business createBusiness(String type) {
return new B1Business();
}
B2Business createBusiness(String type) {
return new B2Business();
}
}
Spring中对Bean的管理使用的是工厂模式创建的对象,每个对象根据定义可以翻译为指定的beanDefinition,beanFactory会根据beanDefinition生成对应的对象,取出对象beanDefinition中的ConstructorArgs,构造函数入参列表,根据入参类型调用构造函数生成bean