工厂模式是一种创建型设计模式,其主要目的是提供一个创建对象的接口,但将具体类的实例化延迟到子类中。这样,客户端代码就不需要知道要实例化的具体类,只需要知道使用的工厂接口。
项目结构如下
代码实例如下
所有水果都要实现这个接口
public interface AllFruits {
void eatFruits();
}
实现类如下
public class AppleFruit implements AllFruits {
@Override
public void eatFruits() {
System.out.println("吃苹果");
}
}
@Service
public class BananaFruit implements AllFruits {
@Override
public void eatFruits() {
System.out.println("吃香蕉");
}
}
@Service
public class OrangeFruit implements AllFruits {
@Override
public void eatFruits() {
System.out.println("吃橙子");
}
}
@Service
public class WatermelonFruit implements AllFruits {
@Override
public void eatFruits() {
System.out.println("吃西瓜");
}
}
然后将实现类存储到一个map中保存以备使用,key记录水果的类型,value为实现类
public class FruitsConfig {
protected static Map<Integer, AllFruits> fruitsMap = new ConcurrentHashMap<>();
@Autowired
private AppleFruit appleFruit;
@Autowired
private BananaFruit bananaFruit;
@Autowired
private OrangeFruit orangeFruit;
@Autowired
private WatermelonFruit watermelonFruit;
@PostConstruct
public void init() {
fruitsMap.put(1, appleFruit);
fruitsMap.put(2, bananaFruit);
fruitsMap.put(3, orangeFruit);
fruitsMap.put(4, watermelonFruit);
}
}
下面是工厂类
@Service
public class FruitsFactory extends FruitsConfig{
public AllFruits getFruit(Integer fruitType){
return fruitsMap.get(fruitType);
}
}
测试类完成测试,传入一个类型标识即可调用到对应的类
@SpringBootTest
class DemoApplicationTests {
@Autowired
private FruitsFactory fruitsFactory;
@Test
void testFruits() {
AllFruits fruit = fruitsFactory.getFruit(1);
fruit.eatFruits();
}
}
标签:fruitsMap,Spring,void,Boot,class,AllFruits,eatFruits,设计模式,public
From: https://www.cnblogs.com/zwmBlog/p/17968552