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

开发深圳网站建设乔拓云智能建站官网

开发深圳网站建设,乔拓云智能建站官网,php电商网站开发的优势,中国建筑装饰网 郭金辉文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 命令模式#xff08;Command#xff09;将类的业务行为以对象的方式封装#xff0c;以便实现行为的参数化、撤销或重做等需求。 非命令模式的困惑#xff1a; 类的行为在运行时是以实例方法… 文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 命令模式Command将类的业务行为以对象的方式封装以便实现行为的参数化、撤销或重做等需求。 非命令模式的困惑 类的行为在运行时是以实例方法的形式调用的当方法执行完毕并返回后方法栈将会消除方法的运行状态主要指局部变量保存在栈帧中它会随着方法栈的销毁而丢失。当方法的运行状态丢失时撤销、重做等类似操作就很难顺利实现。命令模式的优势 命令模式将目标类的业务行为分离出去并用单独的对象类称为命令类封装。在程序运行时被分离的业务行为作为一个独立的对象存在可以被存储或参数化作为参数在不同对象间传递为实现该行为的撤销、重做等提供支持。 1.1 角色 Command(抽象命令)一般定义为接口用来定义执行的命令。ConcreteCommand(具体命令)通常会持有接收者对象并调用接收者对象的相应功能来完成命令要执行的操作。Receiver(接收者)真正执行命令的对象。任何类都可能成为接收者只要它能够实现命令要求实现的相应功能。Invoker(调用者)要求命令对象执行请求通常会持有命令对象可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方也就是说相当于使用命令对象的入口。Client创建具体的命令对象并且设置命令对象的接收者。 1.2 类图 #mermaid-svg-tJkLdD8pCohya3Fd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tJkLdD8pCohya3Fd .error-icon{fill:#552222;}#mermaid-svg-tJkLdD8pCohya3Fd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tJkLdD8pCohya3Fd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-tJkLdD8pCohya3Fd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tJkLdD8pCohya3Fd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tJkLdD8pCohya3Fd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tJkLdD8pCohya3Fd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tJkLdD8pCohya3Fd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tJkLdD8pCohya3Fd .marker.cross{stroke:#333333;}#mermaid-svg-tJkLdD8pCohya3Fd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tJkLdD8pCohya3Fd g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-tJkLdD8pCohya3Fd g.classGroup text .title{font-weight:bolder;}#mermaid-svg-tJkLdD8pCohya3Fd .nodeLabel,#mermaid-svg-tJkLdD8pCohya3Fd .edgeLabel{color:#131300;}#mermaid-svg-tJkLdD8pCohya3Fd .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-tJkLdD8pCohya3Fd .label text{fill:#131300;}#mermaid-svg-tJkLdD8pCohya3Fd .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-tJkLdD8pCohya3Fd .classTitle{font-weight:bolder;}#mermaid-svg-tJkLdD8pCohya3Fd .node rect,#mermaid-svg-tJkLdD8pCohya3Fd .node circle,#mermaid-svg-tJkLdD8pCohya3Fd .node ellipse,#mermaid-svg-tJkLdD8pCohya3Fd .node polygon,#mermaid-svg-tJkLdD8pCohya3Fd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tJkLdD8pCohya3Fd .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-tJkLdD8pCohya3Fd g.clickable{cursor:pointer;}#mermaid-svg-tJkLdD8pCohya3Fd g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-tJkLdD8pCohya3Fd g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-tJkLdD8pCohya3Fd .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-tJkLdD8pCohya3Fd .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-tJkLdD8pCohya3Fd .dashed-line{stroke-dasharray:3;}#mermaid-svg-tJkLdD8pCohya3Fd #compositionStart,#mermaid-svg-tJkLdD8pCohya3Fd .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #compositionEnd,#mermaid-svg-tJkLdD8pCohya3Fd .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #dependencyStart,#mermaid-svg-tJkLdD8pCohya3Fd .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #dependencyStart,#mermaid-svg-tJkLdD8pCohya3Fd .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #extensionStart,#mermaid-svg-tJkLdD8pCohya3Fd .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #extensionEnd,#mermaid-svg-tJkLdD8pCohya3Fd .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #aggregationStart,#mermaid-svg-tJkLdD8pCohya3Fd .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd #aggregationEnd,#mermaid-svg-tJkLdD8pCohya3Fd .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-tJkLdD8pCohya3Fd .edgeTerminals{font-size:11px;}#mermaid-svg-tJkLdD8pCohya3Fd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} «interface» Command execute() ConcreteCommand -state: State -receiver:Receiver execute() Receiver CommandAction() Invoker store() Client store() 2. 代码示例 2.1 设计 定义一个抽象命令Command定义两个具体命令Start和Stop 它实现了抽象命令Command它继承了接收者Service 定义一个接收者Service 它有Start()和Stop()两个方法分别对应它的启动和停止操作 定义一个调用者 它是Command的聚合它的AddCommand()方法将Command加入调用者它的Option()方法执行了加入它的命令 调用 实例化一个接收者实例化两个具体命令实例化一个执行者各命令加入执行者执行执行者的Option()方法验证接收者状态 2.2 代码 代码 package mainimport fmt// 创建抽象命令 type Command interface {execute() }// 创建具体命令start type Start struct {Status boolService *Service }func (s *Start) execute() {err : s.Service.start()if err ! nil {s.Status true}s.Status false }// 定义具体命令Stop type Stop struct {Status boolService *Service }func (s *Stop) execute() {err : s.Service.stop()if err ! nil {s.Status true}s.Status false }// 定义接收者 type Service struct {status string }func (s *Service) start() (err error) {fmt.Println(执行启动操作) //假装执行了操作实际操作中如果有错这里会抛出s.status Runningreturn nil }func (s *Service) stop() (err error) {fmt.Println(执行停止操作) //假装执行了停止实际操作中如果有错这里会抛出s.status Exitedreturn nil }func (s *Service) GetStatus() {fmt.Printf(服务状态%v, s.status) }// 调用者 type Invoker struct {commands []Command }func (i *Invoker) AddCommand(command ...Command) {i.commands append(i.commands, command...)}func (i *Invoker) option() {for _, command : range i.commands {command.execute()} }func main() {//实例化一个接收者myService : Service{}//实例化一个具体命令start : Start{Service: myService,}//实例化另一个具体命令stop : Stop{Service: myService,}//实例化一个调用者invoker : Invoker{}//将刚才实例化的命令加入调用者invoker.AddCommand(stop, start)//执行操作invoker.option()//验证接受者状态myService.GetStatus() }输出 执行停止操作 执行启动操作 服务状态Running2.3 类图 #mermaid-svg-spmTxHLNOKTEiivv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-spmTxHLNOKTEiivv .error-icon{fill:#552222;}#mermaid-svg-spmTxHLNOKTEiivv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-spmTxHLNOKTEiivv .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-spmTxHLNOKTEiivv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-spmTxHLNOKTEiivv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-spmTxHLNOKTEiivv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-spmTxHLNOKTEiivv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-spmTxHLNOKTEiivv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-spmTxHLNOKTEiivv .marker.cross{stroke:#333333;}#mermaid-svg-spmTxHLNOKTEiivv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-spmTxHLNOKTEiivv g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-spmTxHLNOKTEiivv g.classGroup text .title{font-weight:bolder;}#mermaid-svg-spmTxHLNOKTEiivv .nodeLabel,#mermaid-svg-spmTxHLNOKTEiivv .edgeLabel{color:#131300;}#mermaid-svg-spmTxHLNOKTEiivv .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-spmTxHLNOKTEiivv .label text{fill:#131300;}#mermaid-svg-spmTxHLNOKTEiivv .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-spmTxHLNOKTEiivv .classTitle{font-weight:bolder;}#mermaid-svg-spmTxHLNOKTEiivv .node rect,#mermaid-svg-spmTxHLNOKTEiivv .node circle,#mermaid-svg-spmTxHLNOKTEiivv .node ellipse,#mermaid-svg-spmTxHLNOKTEiivv .node polygon,#mermaid-svg-spmTxHLNOKTEiivv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-spmTxHLNOKTEiivv .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-spmTxHLNOKTEiivv g.clickable{cursor:pointer;}#mermaid-svg-spmTxHLNOKTEiivv g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-spmTxHLNOKTEiivv g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-spmTxHLNOKTEiivv .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-spmTxHLNOKTEiivv .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-spmTxHLNOKTEiivv .dashed-line{stroke-dasharray:3;}#mermaid-svg-spmTxHLNOKTEiivv #compositionStart,#mermaid-svg-spmTxHLNOKTEiivv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #compositionEnd,#mermaid-svg-spmTxHLNOKTEiivv .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #dependencyStart,#mermaid-svg-spmTxHLNOKTEiivv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #dependencyStart,#mermaid-svg-spmTxHLNOKTEiivv .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #extensionStart,#mermaid-svg-spmTxHLNOKTEiivv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #extensionEnd,#mermaid-svg-spmTxHLNOKTEiivv .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #aggregationStart,#mermaid-svg-spmTxHLNOKTEiivv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv #aggregationEnd,#mermaid-svg-spmTxHLNOKTEiivv .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-spmTxHLNOKTEiivv .edgeTerminals{font-size:11px;}#mermaid-svg-spmTxHLNOKTEiivv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Invoker commands:[]Command AddCommand(command ...Command) option() «interface» Command execute() Start Status:bool Service:*Service Execute() Stop Status:bool Service:*Service Execute() Service status:string start() error) stop()error) GetStatus()
http://www.tj-hxxt.cn/news/225273.html

相关文章:

  • 导航网站php网站模板为什么不好
  • 用网站做成软件wdcp和wordpress
  • 如何快速找到做网站的客户百度一下你就知道百度首页
  • wordpress谷歌网站地图公司网站建设内容建议
  • 衡水网站公司wordpress重定向
  • 免费推广网站哪家好雄安网站制作多少钱
  • 建站工具箱折800 网站模板
  • 目前网站开发应用到的技术有什么wordpress菜单使用2层
  • 阳谷做网站推广东莞手机网站建设
  • 网页给别人做的 网站后续收费吗wordpress 3.8.3 下载
  • 做网站怎么穿插元素iis 修改默认网站
  • 网站界面设计分析wordpress pdf文章
  • 上海外贸网站google建站网站经营内容
  • 网站建设的维护工作有哪些为什么那么多人建网站做博客
  • 网站安全的必要性设计说明万能模板500字
  • 大连网站网站搭建制作怎么在网上推广广告
  • 做招聘信息的网站有哪些内容上传网站程序
  • 网站制作 万网用户界面设计的重要性
  • 电商网站设计页面设计电商运营八大流程
  • 用来备案企业网站wordpress与微信支付宝
  • 现在建网站可以赚钱吗掌握商务网站建设内容
  • 2019建设什么网站好运营北风淘淘网站开发
  • 钦州市建设工程质量监督站网站哈尔滨市建设工程交易中心
  • 韩国的电商网站哈尔滨网站优化方式
  • 海南网站公司几十万做网站平台
  • 域名和网站的关系住房和城乡建设厅安全员证
  • 2018年网站开发语言排行拼团做的比较好的网站
  • 建设境外网站需要什么手续潍坊网站建设 中公
  • 网站优化百度seo兼职优化
  • 国外社交网站做的比较好的是建设网站的企业邮箱网站建设服务