java 理解一下策略模式,工厂模式

开发遇到了一个工厂模式和策略模式合起来的代码,觉得真的是写的太好了,所以打算了解下这两个模式的区别。

 

策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
工厂模式:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果。

 

那么看着上面的红字,代码实现的方式就很简单了。

策略模式:通过接口定义一系列方法,在根据不同的功能创建类,具体实现这个接口的方法。

工厂模式:通过定义一个父类,多个子类继承父类,常见的是子类构造方法对父类的属性进行操作,也有调用子类的方法对父类进行操作。

 

工厂放策略

@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 {
//省略
}

 

 

工厂模式和策略模式结合起来,工厂只带入一个策略基类即可轻易实现工厂模式,这代码真的很好,就是我实力不行,不知道怎么说。。。

posted @ 2018-06-22 17:53  lgp20151222  阅读(335)  评论(0编辑  收藏  举报