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

江西网站设计哪家强在线长链接转短链接

江西网站设计哪家强,在线长链接转短链接,河南省住房和城乡建设信息网,编程开发工具有哪些设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…

设计思路

状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状态和行为。

场景描述

假设我们有一个简单的文档编辑器,文档可以处于不同的编辑状态:草稿、审核、发布。每个状态对应不同的行为,比如在草稿状态下可以编辑内容,在审核状态下可以提交审核,在发布状态下可以查看内容但不能编辑。我们将使用状态模式来实现这一场景。

实现示例

下面是一个使用状态模式实现的 Go 语言示例,展示了一个简单的文档编辑系统:

package mainimport "fmt"// DocumentState 是状态接口,定义了文档状态的行为
type DocumentState interface {Edit() errorSubmit() errorPublish() error
}// Document 是包含状态的上下文
type Document struct {state DocumentState
}// SetState 设置文档的当前状态
func (d *Document) SetState(state DocumentState) {d.state = state
}// Edit 触发编辑行为
func (d *Document) Edit() error {return d.state.Edit()
}// Submit 触发提交审核行为
func (d *Document) Submit() error {return d.state.Submit()
}// Publish 触发发布行为
func (d *Document) Publish() error {return d.state.Publish()
}// DraftState 是草稿状态
type DraftState struct {document *Document
}func (s *DraftState) Edit() error {fmt.Println("Editing the document.")return nil
}func (s *DraftState) Submit() error {fmt.Println("Submitting the document for review.")s.document.SetState(&ReviewState{document: s.document})return nil
}func (s *DraftState) Publish() error {return fmt.Errorf("document cannot be published directly from draft")
}// ReviewState 是审核状态
type ReviewState struct {document *Document
}func (s *ReviewState) Edit() error {return fmt.Errorf("document cannot be edited during review")
}func (s *ReviewState) Submit() error {return fmt.Errorf("document is already under review")
}func (s *ReviewState) Publish() error {fmt.Println("Publishing the document.")s.document.SetState(&PublishedState{document: s.document})return nil
}// PublishedState 是已发布状态
type PublishedState struct {document *Document
}func (s *PublishedState) Edit() error {return fmt.Errorf("document cannot be edited after publishing")
}func (s *PublishedState) Submit() error {return fmt.Errorf("document is already published")
}func (s *PublishedState) Publish() error {fmt.Println("Document is already published.")return nil
}func main() {// 创建一个文档,并设置初始状态为草稿document := &Document{}initialState := &DraftState{document: document}document.SetState(initialState)// 编辑文档err := document.Edit()if err != nil {fmt.Println("Error:", err)}// 提交文档审核err = document.Submit()if err != nil {fmt.Println("Error:", err)}// 尝试编辑文档(应失败,因为在审核中)err = document.Edit()if err != nil {fmt.Println("Error:", err)}// 发布文档err = document.Publish()if err != nil {fmt.Println("Error:", err)}// 尝试发布文档(应成功,因为已发布)err = document.Publish()if err != nil {fmt.Println("Error:", err)}
}

代码解释

  • DocumentState 接口:定义了文档状态的行为接口,包括 EditSubmitPublish 方法。每个状态实现这些行为。

  • Document 结构体:代表文档对象,包含一个 DocumentState。通过 SetState 方法可以改变文档的状态。

  • DraftState、ReviewState、PublishedState:分别实现了 DocumentState 接口,表示文档的不同状态。每个状态根据其特性实现了相应的行为。

  • main 函数:演示了如何使用状态模式管理文档的状态转换。文档初始状态为草稿,可以编辑和提交审核;审核状态下可以发布;发布状态下可以查看,但不能编辑或再次发布。

总结

「状态模式」抽象过程的核心是:

  • 每一个状态映射对应行为
  • 行为实现同一个接口interface
  • 行为是内部的一个状态
  • 状态是不断变化的

文章转载自:

http://M6uSA7ub.rrhgx.cn
http://J27WJdNR.rrhgx.cn
http://gaXj9jWw.rrhgx.cn
http://7lyRNPHs.rrhgx.cn
http://4jeKXDck.rrhgx.cn
http://TlKCed9R.rrhgx.cn
http://xtQakkY4.rrhgx.cn
http://L2l8bu9a.rrhgx.cn
http://7Dwgv1jt.rrhgx.cn
http://LLVozN4C.rrhgx.cn
http://KpFwv63U.rrhgx.cn
http://wFgBkZQt.rrhgx.cn
http://irFD0o9P.rrhgx.cn
http://HMkoJqmv.rrhgx.cn
http://3PmJnoxI.rrhgx.cn
http://iuyylUW2.rrhgx.cn
http://rNDLGBYd.rrhgx.cn
http://EOdbJefi.rrhgx.cn
http://Na10QFTh.rrhgx.cn
http://mjZvdmKN.rrhgx.cn
http://SZofL1y8.rrhgx.cn
http://xDqZ3Xpl.rrhgx.cn
http://zV1X0b0v.rrhgx.cn
http://s5h2YFL5.rrhgx.cn
http://Vy9scYgW.rrhgx.cn
http://ftC1as2t.rrhgx.cn
http://Q4MtVa5U.rrhgx.cn
http://9SBABTfm.rrhgx.cn
http://27Ll5UkE.rrhgx.cn
http://h9y4SCp6.rrhgx.cn
http://www.dtcms.com/wzjs/637810.html

相关文章:

  • 网站设计赏析漫画驿站网页设计图纸尺寸图
  • 长春市网站建设网站设计模板免费建站
  • 北京响应式网站制作公司建设网站地图
  • 公司网站建设原则网站导航建设注意事项
  • wordpress html5 主题百度seo快速提升排名
  • php做的网站出现404wordpress widget
  • 网站仿静态百度成都总部
  • 英文网站建设 深圳太原网站建设网格未来
  • 成都哪家公司做网站比较好群晖套件做网站
  • 做网站到八方资源网怎么样网站制作公司浩森宇特
  • 做外贸做网站wordpress悬浮广告
  • 把手机做网站服务器网站开发属于软件开发
  • 推荐佛山顺德网站建设网站模板加后台
  • wap网站html5山东网站备案公司
  • 凡客建设网站稳定吗程序员培训学校
  • 网站建设华企云商快站淘客中转页
  • 中国搜索引擎网站排名广州市中智软件开发有限公司
  • 北京网站优化方法谢馥春网站建设的优势
  • 上海松江做网站的公司黄金网站软件app视频
  • html5网站开发方案保定网站制作计划
  • 阿里域名注册网站学平面设计怎么样啊
  • 网站搭建服务器网络域名后缀
  • 广州做网站哪家好公司网站打不开了
  • 网站建设公司怎么做的怎么做万网网站
  • 海搜网做的网站怎么样电子邮箱网站注册
  • 学院网站建设的需求分析深圳买门的网站建设
  • 玉林网站建设培训网站建设与管理培训总结
  • 灵璧网站建设wordpress 设置404
  • 自己电脑做网站服务器广域网访问山东公司网站开发
  • 设计师的网站网站维护要学多久