实战
需求
实现浏览记录功能,浏览记录包含性能报告,选用攻略以及上榜产品。
浏览记录枚举
public enum BrowsingHistoryType {
PERFORMANCE_REPORT(1),//性能报告
SELECTION_STRATEGY(2),//选用攻略
GOODS(3),//产品
VALID(0),//有效
NOTVALID(1);//无效
private final int statusNum;
BrowsingHistoryType(int statusNum){
this.statusNum = statusNum;
}
public int getStatusNum(){
return statusNum;
}
}
工厂模式实现
public class StrategyFactory {
private Map<Integer, Strategy> map;
public StrategyFactory() {
List<Strategy> strategies = new ArrayList<>();
strategies.add(new PerformanceRrporeStrategy());
strategies.add(new SelectionStrategy());
strategies.add(new GoodsStrategy());
map = strategies.stream().collect(Collectors.toMap(Strategy::getType, strategy -> strategy));
/* 等同上面
map = new HashMap<>();
for (Strategy strategy : strategies) {
map.put(strategy.getType(), strategy);
}*/
}
public static class Holder {
public static StrategyFactory instance = new StrategyFactory();
}
public static StrategyFactory getInstance() {
return Holder.instance;
}
public Strategy get(Integer type) {
return map.get(type);
}
}
策略模式实现
策略接口
public interface Strategy {
BrowsingHistoryDto getBrowsingHistory(UserBrowsingHistory userBrowsingHistories);
int getType();
}
策略具体实现类
public class PerformanceRrporeStrategy implements Strategy{
@Override
public BrowsingHistoryDto getBrowsingHistory(UserBrowsingHistory userBrowsingHistories) {
UserBrowsingHistoryService userBrowsingHistoryService = UserBrowsingHistoryServiceImpl.me();
BrowsingHistoryDto browsingHistoryDto = userBrowsingHistoryService.getPerformanceRrporeBrowsingHistoryDto(userBrowsingHistories.getRelevanceId());
browsingHistoryDto.setId(userBrowsingHistories.getId());
return browsingHistoryDto;
}
@Override
public int getType() {
return BrowsingHistoryType.PERFORMANCE_REPORT.getStatusNum();
}
}
public class SelectionStrategy implements Strategy{
@Override
public BrowsingHistoryDto getBrowsingHistory(UserBrowsingHistory userBrowsingHistories) {
UserBrowsingHistoryService userBrowsingHistoryService = UserBrowsingHistoryServiceImpl.me();
BrowsingHistoryDto browsingHistoryDto = userBrowsingHistoryService.getSelectionStrategyBrowsingHistoryDto(userBrowsingHistories.getRelevanceId());
browsingHistoryDto.setId(userBrowsingHistories.getId());
return browsingHistoryDto;
}
@Override
public int getType() {
return BrowsingHistoryType.SELECTION_STRATEGY.getStatusNum();
}
}
public class GoodsStrategy implements Strategy{
@Override
public BrowsingHistoryDto getBrowsingHistory(UserBrowsingHistory userBrowsingHistories) {
UserBrowsingHistoryService userBrowsingHistoryService = UserBrowsingHistoryServiceImpl.me();
BrowsingHistoryDto browsingHistoryDto = userBrowsingHistoryService.getGoodsBrowsingHistoryDto(userBrowsingHistories.getRelevanceId());
browsingHistoryDto.setId(userBrowsingHistories.getId());
return browsingHistoryDto;
}
@Override
public int getType() {
return BrowsingHistoryType.GOODS.getStatusNum();
}
}