zhongrj
2023-06-01 5d75e9dfde8350bf7ef49c3d6f07e0fd780e9e66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package cn.gistack.sm.notice.strategy;
 
import cn.gistack.sm.notice.entity.Notice;
import cn.gistack.sm.notice.strategy.service.INoticeService;
import org.springframework.stereotype.Service;
 
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
/**
 * 通知策略
 * @author zhongrj
 * @date 2023-05-30
 * @Description : 利用Spring的发现机制,将实现了NoticeStrategyService的类都put到noticeStrategyMap里面。
 *                 后面只需要根据type对应好 各个实现类的注解 如: @Component("tel") 就可以取出不同的业务实现类
 */
@Service
public class NoticeTypeStrategyContext {
 
    private final Map<String, INoticeService> noticeStrategyMap = new ConcurrentHashMap<>();
 
    public NoticeTypeStrategyContext(Map<String, INoticeService> strategyMap) {
        this.noticeStrategyMap.clear();
        strategyMap.forEach((k, v)-> this.noticeStrategyMap.put(k, v));
    }
 
    public INoticeService getResource(Notice notice){
        return noticeStrategyMap.get(notice.getType());
    }
}