说明
使用工厂模式、enum,消除看起来特别复杂的if判断。
在使用支付时,不同的渠道,除了支付共用外,还有渠道单独的实现。如话费充值、购买抽奖机会。支付成功后,异步结果回来处理支付订单还要处理不同渠道的订单处理。可以根据渠道类别,使用该方式来确定具体的实现类。
涉及的类
1.factory工厂类
2.Enum枚举类
3.Interface抽象接口
4.接口实现类
//工厂类
@Component
public class TestFactory implements ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(
ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
public TestInterface build(String name){
return (TestInterface )applicationContext
.getBean(TestEnum.get(name);
}
}
//抽象接口
public interface TestInterface{
void test1();
}
//枚举
public enum TestEnum{
TEST("TEST",Test.class);
private String name;
private Class cc;
TestEnum(String name,Class cc){
this.name=name;this.cc=cc;
}
public static TestInterface get(String name){
TestEnum[] tests =TestEnum.values();
for(TestEnum t:tests){
if(t.name.equals(name){
return t.cc;
}
}
}
}
//实现类
@Component
public class Test implements TestInterface{
public void test1(){
//抽象实现
}
}
//使用类
@SpringBootTest
public class Tt{
@Autowired
private TestFactory testFactory;
@Test
public void test1(){
TestInterface test=testFactory.build("TEST");
test.test1();
}
}
添加实现步骤
1.添加实现接口
2.添加Enum枚举 类型
如果有一个新的实现方式,只要实现TestInterface接口,实现它的方法。在枚举中添加对应的实现。调用的时候,确定是哪一个实现类型。