一
开发遇到了一个工厂模式和策略模式合起来的代码,觉得真的是写的太好了,所以打算了解下这两个模式的区别。
二
策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
工厂模式:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果。
四
那么看着上面的红字,代码实现的方式就很简单了。
策略模式:通过接口定义一系列方法,在根据不同的功能创建类,具体实现这个接口的方法。
工厂模式:通过定义一个父类,多个子类继承父类,常见的是子类构造方法对父类的属性进行操作,也有调用子类的方法对父类进行操作。
五
工厂放策略
@Service public class DrawStragetyFactory { private final Map<String, BaseStragety> strategyMap = new ConcurrentHashMap<>(); /** * BaseStragety 是所有策略类必须实现的接口,策略模式 * 该构造方法会将所有实现 BaseStragety 的类放入工厂 * */ @Autowired public DrawStragetyFactory(Map<String, BaseStragety> stragetyMap){ this.strategyMap.clear(); stragetyMap.forEach((k,v) -> this.strategyMap.put(k,v)); } }
策略基类
//这是空的,你也可以写点东西 public interface BaseStragety { }
工厂模式的实现
/** * 默认发奖策略 继承了 抽象发奖策略 * 抽象发奖策略 实现了 发奖策略接口 * 发奖策略接口 继承了 策略基类 */ @Component("DefaultSendAwardStrategy") public class DefaultSendAwardStrategy extends AbstractSendAwardStrategy { //省略 }
工厂模式和策略模式结合起来,工厂只带入一个策略基类即可轻易实现工厂模式,这代码真的很好,就是我实力不行,不知道怎么说。。。