首先先来理解一下简单工厂模式和策略模式的概念:
1.简单工厂模式:
简单工厂模式是创建型模式, 简单工厂模式的是工厂类根据传入的参数,决定应该创建并且返回哪一个产品类(这些产品类继承自一个父类或接口)的实例。具体的创建过程业务代码不需要关心,简单工厂模式主要用于那些创建对象少的场景。
2.策略模式:
策略模式表示的是在遇到一种问题有多种解法的时候,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。主要用在解决if/else复杂的处理逻辑,易拓展情况下的处理,减少代码臃肿。当然也并不是所以的if/else都需要用到策略模式,。需要减少if/else臃肿时才用到。所以也不必刻意追求消除if/else,相比之下其实有时候if/else更易读。
1.工厂类根据传入的Class类,动态的实例化对象。
/**
* @author max
* @description 策略模式简单工厂类
*/
public class StrategyPatternPlatformFactory {
public static IStrategyPatternService getClass(Class<? extends IStrategyPatternService> clazz){
if (null != clazz){
try {
return clazz.newInstance();
} catch (Exception e) {
throw new SystemException("-1","clazz实例化异常");
}
}
return null;
}
}
2.策略接口类,创建一个接口,根据不同的行为,拓展实现该接口,遵循开闭原则。
/**
* @author max
* @description 策略模式接口
* @date 2020/07/18
*/
@Component
public interface IStrategyPatternService {
//定义相关行为方法,相当于与if中的业务处理逻辑
public String get();
}
3.1.策略接口实现类01
/**
* @author max
* @description 策略模式实现类01
* @date 2020/07/18
*/
public class StrategyPatternService01Impl implements IStrategyPatternService {
@Override
public String get() {
//逻辑处理
return "demo01";
}
}
3.2:策略接口实现类02
/**
* @author max
* @description 策略模式实现类02
* @date 2020/07/18
*/
public class StrategyPatternService02Impl implements IStrategyPatternService {
@Override
public String get() {
//逻辑处理
return "demo02";
}
}
4.最后测试一下
/**
* 策略模式的简单实现
*/
@Test
public void testStrategyPattern(){
//实例化对象
IStrategyPatternService service = StrategyPatternPlatformFactory.getClass(StrategyPatternService01Impl.class);
//调用对象方法
String s = service.get();
System.out.println(s);
}
其实,实现起来不复杂,设计模式是一种思想,是前人积累总结的经验,我们开发遵循这些规则,思路会更加清晰,也更易读。