【设计模式】——抽象工厂模式(12)
程序员文章站
2024-01-20 17:34:10
...
一、定义
抽象工厂模式提供一个创建一系列相关或相互依赖的接口,而无需指定他们他们具体的类。
二、框架运用
Spring中bean的获取
三、实战
1、接口、实现类
public interface IProduct {
void product();
}
@Component
public class ProductA implements IProduct {
@Override
public void product() {
System.out.println("开始生产A");
}
}
@Component
public class ProductB implements IProduct {
@Override
public void product() {
System.out.println("开始生产B");
}
}
2、工具类
@SuppressWarnings("unchecked")
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtil.applicationContext = applicationContext;
}
public static <T> T getBean(String beanName) {
if (applicationContext.containsBean(beanName)) {
return (T) applicationContext.getBean(beanName);
}
return null;
}
public static <T> Map<String, T> getBeansOfType(Class<T> baseType) {
return applicationContext.getBeansOfType(baseType);
}
}
3、工厂类
@Component
public class ProcuctFactory {
@Value("${demo.productName}")
private String productName;
public IProduct getProduct(){
return SpringUtil.getBean(this.productName);
}
}
4、配置文件和测试类
#产品名称
demo.productName=productA
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private ProcuctFactory factory;
@Test
public void test(){
factory.getProduct().product();
}
}
5、结果
开始生产A