设计模式---策略模式+工厂
生活随笔
收集整理的這篇文章主要介紹了
设计模式---策略模式+工厂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關鍵詞:設計模式,策略模式,工廠模式
概要
現在我需要實現一個功能,是添加一路SDI輸出,但是輸出的協議有不同,有udp、srt等,針對不同的協議我要做不同的操作,后面還有可能添加其他的協議,因此這里面用策略模式不錯。
由于單純的策略模式并不能完全消除if...else...,這里我們用了工廠模式再進行封裝(其實就是通過List或Map,消除if...else...)
這里使用springboot管理bean,如果不是spring,自己去new就行。
代碼概要
策略接口
public interface SDIStrategy {
/**
* 創建SDI,先在數據庫中創建此目的地,然后在根據相關協議組裝請求,去SMH創建目的地
*/
void createSDI(Route route, OpenSDIReq req);
}
策略實現
@Component
public class SDIUDPStrategy implements SDIStrategy {
@Override
public void createSDI(Route route, OpenSDIReq req) {
// do something udp一般是內網訪問,ip可配
}
}
@Component
public class SDISRTStrategy implements SDIStrategy {
@Override
public void createSDI(Route route, OpenSDIReq req) {
// do something srt給外網用,可配置端口,延時,加密方式,TTL等
}
}
工廠
@Component
public class SDIStrategyFactory {
private static final Map<String, SDIStrategy> strategies = new HashMap<>();
@Resource
private SDIUDPStrategy sdiudpStrategy;
@Resource
private SDISRTStrategy sdisrtStrategy;
@PostConstruct
public void init() {
strategies.put(SDIProtocolType.UDP.getProtocol(), sdiudpStrategy);
strategies.put(SDIProtocolType.SRT.getProtocol(), sdisrtStrategy);
}
public SDIStrategy getStrategy(String protocol) {
if (SDIProtocolType.getEnum(protocol) == null) {
throw new ServiceException("illegal protocol type, please check it");
}
return strategies.get(protocol);
}
}
此enum類并不是重點,可不看
public enum SDIProtocolType {
UDP("udp"),
SRT("srt");
private String protocol;
SDIProtocolType(String protocol) {
this.protocol = protocol;
}
public String getProtocol() {
return protocol;
}
public static SDIProtocolType getEnum(String protocol) {
for (SDIProtocolType value : SDIProtocolType.values()) {
if (value.getProtocol().equals(protocol)) {
return value;
}
}
return null;
}
}
最終的調用
@Slf4j
@Service
public class SDIServiceImpl implements ISDIService {
@Resource
private SDIStrategyFactory sdiStrategyFactory;
private void createSDIDest(Route route, OpenSDIReq req) {
String protocol = req.getProtocol();
SDIStrategy strategy = sdiStrategyFactory.getStrategy(protocol);
strategy.createSDI(route, req);
}
}
總結
以上是生活随笔為你收集整理的设计模式---策略模式+工厂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式(十一)享元
- 下一篇: APP攻防--安卓逆向&JEB动态调试&