当前位置: 首页 > news >正文

校园网站建设管理制度内蒙古住房与城乡建设厅网站

校园网站建设管理制度,内蒙古住房与城乡建设厅网站,网站建设推广需要多少钱,广告软文范例职责链模式#xff1a;从名字可以拆分为 职责 和 链。即能为请求创建一条由多个处理器组成的链路#xff0c;每个处理器各自负责自己的职责#xff0c;相互之间没有耦合#xff0c;完成自己任务后请求对象即传递到链路的下一个处理器进行处理。 如果在写好的执行函数里加上…职责链模式从名字可以拆分为 职责 和 链。即能为请求创建一条由多个处理器组成的链路每个处理器各自负责自己的职责相互之间没有耦合完成自己任务后请求对象即传递到链路的下一个处理器进行处理。 如果在写好的执行函数里加上部分步骤导致需要增加若干个if-else因为整个流程耦合在一起修改了以后我们就得把整个流程全测一遍。。 而职责链就是把步骤解耦为执行链条从而消除牵一发而动全身的后果。链表插入优点是遍历到前节点插入即可不需要像顺序表一样移动之后所有元素 在一些核心的业务中应用职责链模式能够让我们无痛地扩展业务流程的步骤。 实现责任链模式的对象最起码需要包含如下特性 成员属性 nextHandler: 下一个等待被调用的对象实例 成员方法 SetNext: 把下一个对象的实例绑定到当前对象的nextHandler属性上Do: 当前对象业务逻辑入口他是每个处理对象实现自己逻辑的地方Execute: 负责职责链上请求的处理和传递它会调用当前对象的DonextHandler不为空则调用nextHandler.Do SetNext 和 Execute 这两个行为是每个 ConcreteHandler 都一样的所以这两个可以交给抽象处理类型来实现每个具体处理对象再继承抽象类型即可减少重复操作。 以病人去医院看病这个处理流程为例提供一个具体示例。看病的具体流程如下 挂号—诊室看病—收费处缴费—药房拿药 利用责任链模式实现这个流程中的每个步骤且相互间不耦合还支持向流程中增加步骤。 先实现职责链模式里的公共部分—即模式的接口和抽象类 type PatientHandler interface {Execute(*patient) errorSetNext(PatientHandler) PatientHandlerDo(*patient) error } // 充当抽象类型实现公共方法抽象方法不实现留给实现类自己实现 type Next struct {nextHandler PatientHandler }func (n *Next) SetNext(handler PatientHandler) PatientHandler {n.nextHandler handlerreturn handler }func (n *Next) Execute(patient *patient) (err error) {// 调用不到外部类型的 Do 方法所以 Next 不能实现 Do 方法if n.nextHandler ! nil {if err n.nextHandler.Do(patient); err ! nil {return}return n.nextHandler.Execute(patient)}return }即使Next实现了Do方法go语言中语法也不能达到在父类方法中调用子类方法的效果—即在例子里面用Next 类型的Execute方法调用不到外部实现类型的Do方法。 定义职责链要处理的请求实现处理逻辑和请求传递的Do、Execute方法的参数都是流程中要处理的请求。这里是医院接诊的流程所以定义一个患者类作为流程的请求。 //流程中的请求类--患者 type patient struct {Name stringRegistrationDone boolDoctorCheckUpDone boolMedicineDone boolPaymentDone bool }按照挂号—诊室看病—收费处缴费—药房拿药这个流程定义四个步骤的处理类来分别实现每个环节的逻辑。 // Reception 挂号处处理器 type Reception struct {Next }func (r *Reception) Do(p *patient) (err error) {if p.RegistrationDone {fmt.Println(Patient registration already done)return}fmt.Println(Reception registering patient)p.RegistrationDone truereturn }// Clinic 诊室处理器--用于医生给病人看病 type Clinic struct {Next }func (d *Clinic) Do(p *patient) (err error) {if p.DoctorCheckUpDone {fmt.Println(Doctor checkup already done)return}fmt.Println(Doctor checking patient)p.DoctorCheckUpDone truereturn }// Cashier 收费处处理器 type Cashier struct {Next }func (c *Cashier) Do(p *patient) (err error) {if p.PaymentDone {fmt.Println(Payment Done)return}fmt.Println(Cashier getting money from patient patient)p.PaymentDone truereturn }// Pharmacy 药房处理器 type Pharmacy struct {Next }func (m *Pharmacy) Do (p *patient) (err error) {if p.MedicineDone {fmt.Println(Medicine already given to patient)return}fmt.Println(Pharmacy giving medicine to patient)p.MedicineDone truereturn }Recepiton接诊挂号这个步骤提供的逻辑没有调用到再定义StartHandler 类型它不提供处理实现只是作为第一个Handler向下转发请求 // StartHandler 不做操作作为第一个Handler向下转发请求 type StartHandler struct {Next }// Do 空Handler的Do func (h *StartHandler) Do(c *patient) (err error) {// 空Handler 这里什么也不做 只是载体 do nothing...return }这是Go 语法限制公共方法Exeute并不能像面向对象那样先调用this.Do 再调用this.nextHandler.Do 把处理类串起来执行 func main() {patientHealthHandler : StartHandler{}//patient : patient{Name: abc}// 设置病人看病的链路patientHealthHandler.SetNext(Reception{}).// 挂号SetNext(Clinic{}). // 诊室看病SetNext(Cashier{}). // 收费处交钱SetNext(Pharmacy{}) // 药房拿药//还可以扩展比如中间加入化验科化验图像科拍片等等// 执行上面设置好的业务流程if err : patientHealthHandler.Execute(patient); err ! nil {// 异常fmt.Println(Fail | Error: err.Error())return}// 成功fmt.Println(Success) }职责链也可以设置中止条件针对例子就是在Execute方法里加判断一旦满足中止后就不再继续往链路的下级节点传递请求。 这也是职责链跟装饰器模式的一个区别装饰器模式无法在增强实体的过程中停止只能执行完整个装饰链路。 针对那些可能未来经常会变的核心业务流程可以在设计初期就考虑使用职责链来实现减轻未来流程不停迭代时不好扩展的痛点。 职责链模式与模板模式的区别在于模板模式的业务流程通常是规定不变的而职责链模式业务是可拓展的
http://www.dnsts.com.cn/news/166352.html

相关文章:

  • 阳江企业网站排名优化网站开发培训多少钱
  • 中山网站建设模板招商crazyuncle WordPress
  • 山东优质校建设专题网站学校语言文字网站建设
  • 怎么给公司建网站建筑人才网查工程师证
  • 徐州手机模板建站如何建设红色旅游网站
  • 毕业设计软件开发网站开发防伪码网站怎么做
  • 东莞做网站注意事项怎样用一台电脑做代理 让别的电脑通过代理上几个网站
  • HTML asp 网站凡客家具质量怎么样
  • 自己做网站有名网站成功秘诀
  • 买网站服务器吗百度怎么优化排名
  • 免费中文wordpress主题下载地址seo排名优化工具推荐
  • 企业建站多少钱一个月建设银行行号查询网站
  • 网站建设编辑部学校网站建设评比
  • wordpress里的模板谷歌优化排名怎么做
  • 免费空间建站网站推荐wordpress怎样制作vr全景
  • 网站建设策划方案书论文广州o2o网站建设
  • 广州定制网站制作平台毕设用别人网站做原型
  • 优秀网站设计流程机械网站建设开发
  • 网站推广主要是做什么安平县建设局网站
  • 建设工程现行标准查询网站网页设计实训报告任务书
  • 做网站找我wordpress使用php版本号
  • 东莞网站建设市场济南网站的优化
  • 嘉兴企业网站建设厦门协会网站建设
  • 个人网站怎么样的dm网站制作软件
  • 福田建网站外包企业做pc网站需要什么资料
  • 网站建设怎么设计更加吸引人软件技术专业介绍公布
  • 苏州网站制作搭建什么是网络营销媒体
  • 辛集网站建设哪家好长沙58同城招聘网找工作招聘信息
  • 外贸网站建设有哪些要求asp.net网站打不开html页面
  • 电信改公网ip可以做网站吗手机app推广联盟