设计模式--工厂模式

54 阅读1分钟

简单工厂:使用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