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

公司网站建设流程好的产品怎么推广语言

公司网站建设流程,好的产品怎么推广语言,外贸网站有哪些?,陕西网页制作职责链模式:从名字可以拆分为 职责 和 链。即能为请求创建一条由多个处理器组成的链路,每个处理器各自负责自己的职责,相互之间没有耦合,完成自己任务后请求对象即传递到链路的下一个处理器进行处理。 如果在写好的执行函数里加上…

职责链模式:从名字可以拆分为 职责 和 链。即能为请求创建一条由多个处理器组成的链路,每个处理器各自负责自己的职责,相互之间没有耦合,完成自己任务后请求对象即传递到链路的下一个处理器进行处理。

如果在写好的执行函数里加上部分步骤,导致需要增加若干个if-else,因为整个流程耦合在一起,修改了以后我们就得把整个流程全测一遍。。 而职责链就是把步骤解耦为执行链条,从而消除牵一发而动全身的后果。(链表插入优点是遍历到前节点插入即可,不需要像顺序表一样移动之后所有元素)

在一些核心的业务中,应用职责链模式能够让我们无痛地扩展业务流程的步骤

实现责任链模式的对象最起码需要包含如下特性:

  • 成员属性

    • nextHandler: 下一个等待被调用的对象实例
  • 成员方法

    • SetNext: 把下一个对象的实例绑定到当前对象的nextHandler属性上;
    • Do: 当前对象业务逻辑入口,他是每个处理对象实现自己逻辑的地方;
    • Execute: 负责职责链上请求的处理和传递;它会调用当前对象的DonextHandler不为空则调用nextHandler.Do

SetNextExecute 这两个行为是每个 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方法。

定义职责链要处理的请求,实现处理逻辑和请求传递的DoExecute方法的参数都是流程中要处理的请求。这里是医院接诊的流程,所以定义一个患者类作为流程的请求。

//流程中的请求类--患者
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.hkea.cn/news/473747/

相关文章:

  • 站长工具seo综合查询权重百度在线搜索
  • 伊犁网站建设评价怎样才能上百度
  • 房地产网站建设方案百度实名认证
  • 做外贸可以在哪些网站注册网络项目免费的资源网
  • 中国建设银行信用卡网站首页青岛关键词优化平台
  • 阿里云网站建设考试题目长沙网站推广服务公司
  • 甘肃建设项目审批权限网站俄罗斯搜索引擎yandex官网入口
  • 网站建设公司新员工培训ppt模板百度热门搜索排行榜
  • 仿魔客吧网站模板网址大全是ie浏览器吗
  • 网站产品后台界面怎么做湖南关键词排名推广
  • 网站数据每隔几秒切换怎么做的湖南百度seo排名点击软件
  • 网站制作先学什么百度新闻下载安装
  • 河南省网站建设哪家好免费观看行情软件网站进入
  • 粘合剂东莞网站建设体育热点新闻
  • 百度网站排名关键词整站优化培训网站建设
  • 网络平台代理seo外包 杭州
  • 东方头条网站源码免费推广软件工具
  • 北京网站建设公司分享网站改版注意事项流程优化四个方法
  • 案例学 网页设计与网站建设手机百度seo快速排名
  • 江门网站建设总部电话产品推广渠道有哪些
  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo