状态 - 行为设计模式 - MetaTrader 5 库
//+------------------------------------------------------------------+ //| 状态.mq5 | //| 2019-2020,迪米特里·佩切里察 | //| 792112@gmail.com | //+------------------------------------------------------------------+ // // 状态-行为设计模式 // // 来自:设计模式:可重用的面向对象软件的元素 // 作者:erich gamma、richard helm、ralph johnson、john vlissides // 发表于 1994 年 // // 意图 // // 允许对象在其内部状态发生变化时改变其行为。 //该对象将出现改变其类 // // 适用性 // // 对象的行为取决于其状态,并且它必须改变其状态 //运行时的行为取决于该状态 // 操作具有依赖于的大型、多部分条件语句 //关于对象的状态。这种状态通常由一个或多个来表示 //枚举常量。通常,多个操作将包含相同的内容 //条件结构。状态模式将条件的每个分支 //在一个单独的类中。这使您可以将对象的状态视为对象 // 就其本身而言,可以独立于其他对象而变化 // // 结构 // // 状态 // |上下文 |o------------------>|状态 | // |---------------| |--------| // |Request() | |句柄()| // |状态.Handle()| | // +--------------------+--- - - - - // || | // |ConcreteStateA| |具体状态B| // |--------------| |--------------| // |Handle() | |句柄() | // // 参与者 // // 语境 // 定义客户感兴趣的接口 // 维护一个具体状态子类的实例,该子类定义 //当前状态 // 状态 // 定义一个接口来封装相关的行为 //具有上下文的特定状态 // 具体状态子类 // 每个子类实现与状态相关的行为 //上下文 // // 合作 // // 上下文将特定于状态的请求委托给当前的具体对象 //状态对象 // 上下文可以将自身作为参数传递给状态对象处理 //请求。这允许状态对象在必要时访问上下文 // context 是客户端的主要界面。客户可以配置 //具有状态对象的上下文。一旦配置了上下文,它的客户端 //不必直接处理状态对象 // 上下文或具体状态子类可以决定哪个 //状态继承另一个状态以及在什么情况下 //+------------------------------------------------------------------+ //|客户端 | //+------------------------------------------------------------------+ #包括#包括 #包括 #包括 空白 启动时(空白) { 上下文上下文(新的具体状态A); 上下文.Request(); 上下文.Request(); }// 输出 // // 上下文正在请求其状态 2097152,它将处理此上下文 // 具体状态 a (2097152) 正在处理上下文并更改上下文状态 // 上下文状态更改为:3145728 // 上下文正在请求其状态 3145728,它将处理此上下文 // 具体状态 b (3145728) 正在处理上下文并更改上下文状态 // 上下文状态更改为:4194304 // // 结果 // // 它本地化特定于状态的行为并对行为进行分区 //不同的状态 // 它使状态转换变得明确 // 状态对象可以共享 // // 执行 // // 谁定义状态转换? // 基于表格的替代方案 // 创建和销毁状态对象 // 使用动态继承 // // 相关模式 // // 享元模式解释了何时以及如何共享状态对象 // 状态对象通常是单例 // //+------------------------------------------------------------------+
附件下载
📎 state.mq5 (4.36 KB)
📎 state.mqh (0.5 KB)
📎 context.mqh (2.04 KB)
📎 concretestatea.mqh (1.01 KB)
📎 concretestateb.mqh (1.01 KB)
Source: MQL5 #32121
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
