什么是工厂模式?
工厂模式是创建对象的一种设计模式。简单来说,创建对象的地方我们就叫做工厂,在工厂中统一管理各种对象。我们通过统一的接口来指向新创建的对象。
这里的工厂模式我们可以和策略模式结合来说,因为策略模式需要多种策略,我们就可以使用SpringBoot的自动注入功能,将不同类型的实现类注入到Map或者List中,从而实现工厂模式的效果。
工厂模式代码实现
首先:我们定义一个接口还有几个实现类,小狗汪汪汪 还有 小猫喵喵喵;
public interface Animal {
void speak();
}
@Component
public class Dog implements Animal {
@Override
public void speak() {
System.out.println("Woof!");
}
}
@Component
public class Cat implements Animal {
@Override
public void speak() {
System.out.println("Meow!");
}
}
接下来,创建一个工厂类,将所有实现类注入到一个Map中:
@Component
public class AnimalFactory {
private final Map<String, Animal> animalMap;
@Autowired
public AnimalFactory(List<Animal> animals) {
animalMap = animals.stream().collect(Collectors.toMap(
animal -> animal.getClass().getSimpleName().toLowerCase(),
Function.identity()
));
}
public Animal getAnimal(String type) {
return animalMap.get(type.toLowerCase());
}
}
最后,在Spring Boot应用程序中使用这个工厂类:
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
@Autowired
private AnimalFactory animalFactory;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Animal dog = animalFactory.getAnimal("dog");
dog.speak(); // 输出: Woof!
Animal cat = animalFactory.getAnimal("cat");
cat.speak(); // 输出: Meow!
}
}
总结
工厂模式的优点;
- 解耦:工厂模式对象创建和使用分离;
- 对象集中管理:将对象的创建全部管理到一起;
工厂模式的缺点:
- 针对简单的对象管理,不推荐使用工厂模式,可能会显得过于复杂了。比如我们只有两个对象,又单独创建一个HashMap来维护这两个对象。