怎样建设自己的物流信息网站,建设网站番禺,jsp免费建站系统,做行业网站类似于责任链模式吧#xff0c;不同类实现相同的入参#xff0c;执行不同的操作#xff0c;一个执行完再确定要不要执行下一个。
用go实现#xff1a;
1.定义一个接口 后面所有的handler都要实现这个接口的handler方法
type IHandler interface {/**true 表示通过 false…类似于责任链模式吧不同类实现相同的入参执行不同的操作一个执行完再确定要不要执行下一个。
用go实现
1.定义一个接口 后面所有的handler都要实现这个接口的handler方法
type IHandler interface {/**true 表示通过 false 表示后面就不用再跑了*/Handler(requestSeatContext *model.RequestSeatContext) bool
}2.定义接口的入参 为了测试只写一个参数参数只有一个属性代表是否执行下一个handler 实际生成中各个handler就是靠这个传递信息的
type RequestSeatContext struct {LastHandlerOK bool
}3.定义接口实现 我们定义3个实现对象 a.解析参数的handler b.执行abtest的handler c.输出log日志的handler
type RequestHandler struct {name string
}
func (handler *RequestHandler) Handler(requestSeatContext *model.RequestSeatContext) bool {if !requestSeatContext.LastHandlerOK {return false}fmt.Println(RequestHandler 执行)return true
}type AbTestHandler struct {name string
}
func (handler *AbTestHandler) Handler(requestSeatContext *model.RequestSeatContext) bool {if !requestSeatContext.LastHandlerOK {return false}fmt.Println(AbTestHandler 执行)return true
}type LogHandler struct {name string
}
func (handler *LogHandler) Handler(requestSeatContext *model.RequestSeatContext) bool {if !requestSeatContext.LastHandlerOK {return false}fmt.Println(LogHandler 执行)return true
}4.确定handler执行顺序定义各个handler组成的数组
var (requestHandlers []IHandler
)requestHandlers []IHandler{myhandler.RequestHandler{}, //1. 解析参数AbTestHandler{}, //2. abtestLogHandler{}, //3. 日志处理}5.初始化handler入参 requestSeatContext : model.RequestSeatContext{LastHandlerOK:true,}6.执行handler //执行for _, handler : range requestHandlers {requestSeatContext.LastHandlerOK handler.Handler(requestSeatContext)}执行结果
RequestHandler 执行
AbTestHandler 执行
LogHandler 执行如果把中间的AbTestHandler的handler方法的返回值改为false 执行结果就变成
RequestHandler 执行
AbTestHandler 执行