设计模式之策略模式-- 运维系统的回调类设计
基本原则
-
动静分离
-
多用组合,少用继承
-
面向接口编程,而不是面向实现
接口和类的功能描述
- CallbackFlow: 抽象一个接口,这是一个多态接口,用于变化部分,因为更新的服务类型不一样,流程不一样。
- CallbackHandler: 回调处理类,这个类主要是处理系统请求的回调,会委托CallbackFlow类取到更新流程的数据,并作逻辑处理得出当前执行的阶段最后返回给用户。
接口、类的实现和伪代码
- 获取更新流程的抽象接口
package VoneCallback;
import java.util.HashMap;
public interface CallbackFlow{
//获取stage阶段数
public int getStagecount();
//获取stage流程代码和阶段描述
public String getFlowDesc();
//获取流程是否变更
public String getChangeStatus();
//设置流程变更状态
public void setChangeStatus();
}
-
获取k8s服务更新流程的具体实现
package VoneCallback; import java.util.HashMap; public class CallbackK8sService implements CallbackFlow{ @Override public String getChangeStatus() { //从redis 获取数据变更标识 return Status; } @Override public String getFlowDesc() { String Status = this.getChangeStatus(); if (status == "True"){ // 如果数据标识为true获取数据 res = "get data from redis" this.setChangeStatus(key); return res; } } @Override public void setChangeStatus(String key) { redis.set(key,"false"); } @Override public int getStagecount(String res) { return stagecount; } } -
获取主机类服务
package VoneCallback; public class CallbackHostService implements CallbackFlow{ // the type of hosts service // to do } -
回调处理类
package VoneCallback;
public class CallbackHandler {
CallbackFlow callbackflow;
public CallbackHandler(){
callbackflow = new CallbackK8sService();
}
public String getFlowData(){
String data = callbackflow.getFlowDesc();
}
public String getResStatus(){
String Flowdata = getFlowData();
.....
return ResStatus;
}
}