设计模式其实也就是多态的运用。
需要 声明一个 接口:
*/
public interface BigDecimalInterface<T> {
String add(T v1, T v2);
}
然后不同的 类实现这个接口。
String基本的计算类。
@Service
@Qualifier("String") //具体指明
public class SimpleBigDecimal implements BigDecimalInterface<String>{
//使用spring的IOC时则不需要这一行。
public static final String TYPE = "String";
@Override
public String add(String v1, String v2) {
return null;
}
}
Student计算类
@Service
@Qualifier("student")
public class StudentBigdecimal implements BigDecimalInterface<Student>{
public static final String TYPE = "student";
@Override
public String add(Student v1, Student v2) {
return "student";
}
}
用一个factory将他们加载进map里;
public class BigDecimalFactory {
private static final Map<String, BigDecimalInterface> strategies = new HashMap<>();
static {
strategies.put(SimpleBigDecimal.TYPE,new SimpleBigDecimal());
strategies.put(StudentBigdecimal.TYPE,new StudentBigdecimal());
}
public static void setStrategy(String type, BigDecimalInterface bigDecimalInterface){
strategies.put(type,bigDecimalInterface);
}
public static BigDecimalInterface getStrategy(String type){
return strategies.get(type);
}
}
使用的时候只需要
public static void main(String[] args) {
BigDecimalInterface strategy = BigDecimalFactory.getStrategy(SimpleBigDecimal.TYPE);
strategy.add("1","1");
BigDecimalInterface strategy1 = BigDecimalFactory.getStrategy(StudentBigdecimal.TYPE);
strategy1.add(new Student(),new Student());
System.out.println("");
}
在进行springboot项目开发时,可以利用spring的IOC进行依赖注入。
@Autowired
private ApplicationContext context;
在方法里使用
(BigDecimalInterface)context.getBean("");
根据传入的就可以找到实现类;