likes
comments
collection
share

Trampoline与福格行为模型的相似点

作者站长头像
站长
· 阅读数 28

什么是福格行为模型?

福格行为模型可以用一个公式来表示

B=M+A+PB=M + A + PB=M+A+P
  • BBB表示行为
  • MMM表示动机
  • AAA表示能力
  • PPP表示成功的提示

它们之间的关系可以用下面的图标来表示,在动机足够强且具备相应能力时,我们的行为就在行动线之上,只要给与成功的提示,相应的行为就会发生。

Trampoline与福格行为模型的相似点

动机即愿望,愿望需要行动才能实现,而行动由一系列行为组成,且这些行为通常是需要持续发生的。福格行为模型可以帮助我们设计行为以实现愿望,这些设计的行为会以微习惯的形式嵌入到生活中,即使在我们情绪最低落,意志最薄弱的时候也能够完成。

Trampoline与福格行为模型的相似点

动机和栈

福格行为模型强调动机是不可靠的,它会随时间变化,我们在动机最强时的行为可能在一段时间后变得无法完成。例如作者很想戒掉观看短视频的习惯,觉得它很浪费时间,每次观看后都会下定决心将短视频平台删掉或把该功能关掉。但过了几天之后,一旦没有事情可做或情绪低落,又会不自觉的重新安装观看。

栈在Java程序运行时的空间是有限的,无法无限增长,如果程序需要的栈空间超过分配空间,就会抛出StackOverflowError。从空间角度来说,栈也是不可靠的,因为程序对栈空间的需求是随时间变化的,在维护一段时间或运行一段时间后,需求的空间可能会超出分配空间。

行为设计和Trampolining

动机的不可靠导致了行为的不可持续,所以我们需要对行为进行设计来减弱动机不可靠的影响。福格行为模型的行为设计步骤为

  1. 明确愿望
  2. 探索行为选项
  3. 为自己匹配具体行为
  4. 从微习惯开始
  5. 找到对的提示
  6. 庆祝成功
  7. 排除障碍、重复和扩展

这里2和3是行为分解,找到与我们能力相匹配的行为。4和5是建立行为关联,保证行为发生,用微习惯的方式降低行为对动机的依赖。6和7是行为结果,如果达到预期,可以强化行为的可持续性。如果没有,则需要分析原因,然后重新设计行为。

如果我们要在程序中避免StackOverflowError,也需要对我们的程序进行设计,这个过程叫Trampolining

  1. 将函数返回类型变为Trampoline
  2. 将常数用Done封装
  3. 将thunk函数调用用More封装
  4. 复合函数调用用FlatMap封装
  5. 将程序返回的Trampoline对象用Trampoline的解释函数运行
  6. 返回解释函数的运行结果

对比福格行为模型,2,3和4是函数分解(行为分解),找到所有的函数调用进行封装。 5是建立函数调用关系(建立行为关联),保证在当前表达式计算完成后对栈空间进行清理,并调用下一个函数,减少对栈空间的需求。 6是运行结果(行为结果),如果正确,说明已经消除StackOverflowError,如果仍有异常,则需要找到遗漏的函数调用,然后对其进行封装。

转载自:https://juejin.cn/post/7136949042344361992
评论
请登录