分类
在外汇市场中赚钱的秘密

发现策略中的孪生兄弟

等到迫不得已必须要这么做的时候,再想优化, 不要陷入优化和设计模式的陷阱

状态模式之策略模式的孪生兄弟

置顶 白手黑书 于 2019-04-29 19:58:20 发布 281 收藏

我们还是以一个例子入手。
假设现在我们有一个饮水机,它有以下两个状态: 满桶,空桶。初始状态是满桶,容量是20。饮水机只有一个动作:press,每次press后都会使容量减1,一旦为0,则将状态设置为空桶,这时press没有水流出。

在状态模式中,因为所有的状态都要执行相应的动作,所以我们可以考虑将状态抽象出来。
状态的抽象一般有两种形式:接口和抽象类。如果所有的状态都有共同的数据域,可以使用抽象类,但如果只是单纯的执行动作,就可以使用接口。 这里我们就用接口。

复制代码
接着我们再实现饮水机:
复制代码

至于这个对象,我们可以给它一个专门的名词:Context,也就是上下文类。
上下文是一个难以理解的词眼,放在具体的应用场景中更加直白点。
这里我们的饮水机就是一个Context,它将自己的行为委托给状态对象执行,像是press()方法,就交给具体的状态对象state的press()方法执行。
上下文类的明显特点就是拥有一个引用,然后通过该引用调用相应的方法。
我们是如何区分不同的状态?就是通过每个状态不同的行为来区分,所以不同的状态都有相同的动作,但是这个动作的执行结果是不同的,而且执行结果还有可能会修改当前的状态。为了体现多态,摆脱对具体状态类的依赖,使用Context可以动态的替换状态类,就像策略模式一样。

发现策略中的孪生兄弟——期权交易中的等价或相似策略解析

qmhedging 于 2019-10-10 08:53:56 发布 373 收藏 1

07-30 1268

option_trading 基于策略期权交易 主要型号 sklearn软件包AdaBoost模型由于树莓派上32位系统 即将进行改进 数据预处理不应输出重复项,者非成熟期权模型应有充分文件证明 姓名 日期 接受训练数据详细信息 使用功能 表现 笔记 导入numpymatplotlib ImportError时,在Raspberry PI上遇到以下错误:/lib/arm-linux-gnueabihf/libc.so.6:未找到版本“ GLIBC_2.28” 解决了:pip install numpy --global-option =“-mfloat-abi = hard” --force-reinstall现在可以通过将树莓派版本从9更新到10(Buster)来解决 安装Chrome wbdriver和浏览器以使抓取工作sudo apt-get insta

实际编程中,面对大量的if-else,switch-case逻辑判断,如何优化?

比如老王是临时工,请假只需要直接领导批准,老李是正式工,请假需要先让直接领导审批,再交给主管批准,老张是安全部门的员工,请假需要的流程更复杂……或者哪天系统变化升级,请假制度修改了……换句话说就是请假系统里请假相关的 各个对象并不指定(也不知道)其下一个处理的对象到底是谁,只有在客户端才设定。 这怎么办?这就需要责任链设计模式解决, 发现策略中的孪生兄弟 两者类图不一样,具体解耦责任,转移对象的流程略微的不一样,但是总的目标一致:参考: 大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比。

状态模式和职责链模式对比

大体上看, 责任链模式要比状态模式灵活,虽然 职责链模式灵活,但是遵循够用原则,比如前面的状态模式的例子:Person类的闹表记录一天的状态及其对应的行为,各个状态(判断逻辑)明确知道其下一个状态(处理对象)是谁,在内部编码时就确定了,状态模式就ok了,用责任链就显得很呵呵, 适合就好。

还有简单情景下,可以使用三元运算符 condition ? : 代替简单的if-else语句,或者数组这种随机存储乃至查询性能很好的数据结构替换switch-case。

等到迫不得已必须要这么做的时候,再想优化, 不要陷入优化和设计模式的陷阱

JDK里都有哪些类有状态模式的应用?

拓展:什么是有限状态机?在Java中有什么应用?

(Finite-state machine, FSM),又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

FSM是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。

  • 进入动作( entry action ):在进入状态时进行;
  • 退出动作:在退出状态时进行;
  • 输入动作:依赖于当前状态和输入条件进行;
  • 转移动作:在特定转移时进行。

  • Java的多线程里,线程的状态转移,就可以使用状态机来描述
  • 经常需要使用的正则表达式, 判断字符串格式和解析字符串内容基本全靠它,正则表达式就是有限状态机。仅仅表达形式不同,正则表达式写好后可以通过程序“编译”成状态转换表,就是大家常见的状态转换图。
  • 各种网络协议,记得上计算机网络课时老师讲过——所有的协议定义都有明确的“有限状态机”设计,为此 发现策略中的孪生兄弟 国际电信联盟专门出了规格描述语言SDL(Specification and Description Language)来描述有限状态机。
  • 众所周知的自动客服系统(如10086:接通之后大堆话,按1给查……按2查……按0转……按xx返回xx……)
  • 编译器设计中,词法分析和语法分析都会用到
  • 字符串匹配的 KMP 算法也是自动机算法的一种
  • 游戏开发和设计中,比如一个NPC就是一个很典型的状态机,当玩家按下前进键时,它会从正常状态转移到向前走的状态……

dashuai的博客是终身学习践行者,大厂程序员,且专注于工作经验、学习笔记的分享和日常吐槽,包括但不限于互联网行业,附带分享一些PDF电子书,资料,帮忙内推,欢迎拍砖!

发现策略中的孪生兄弟

铌(niobium)的化学符号是“Nb”,原子序数为41,原子量是92.90638,属周期系第Ⅴ类副族(钒族)元素。这是一种带光泽的灰色金属,具有 顺磁性 。 高纯度铌金属的延展性较高,但会随杂质含量的增加而变硬。 铌对于热中子的捕获截面很低,因此在核工业上有相当大的用处。