设计模式之惰性模式

惰性模式:
惰性模式并不是经典设计模式中的一种,可以把它看作一种拓展的设计模式。

它的使用场景通常如下:
当执行某段代码前有前置逻辑判断,但该前置逻辑判断在特定环境下不会发生改变时,只需要执行一次。
如果已知前置的逻辑判断后,仍然每次执行方法都走一遍前置的逻辑判断,则会造成 js 性能浪费。此时可以使用惰性模式来解决该问题。

它的实现方式:

  1. 利用自执行函数实现
  2. 利用函数重写来实现

举子:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

  /**
   * 惰性模式
   * 惰性模式并不是经典设计模式中的一种,可以把它看作一种拓展的设计模式。
   * 
   * 使用场景:
   * 当执行某段代码前有前置逻辑判断,但该前置逻辑判断在特定环境下不会发生改变时,只用执行一次
   * 如果已知前置的逻辑判断后,仍然每次执行方法都走一遍前置的逻辑判断,则会造成 js 性能浪费
   * 此问题可以用惰性模式解决.
   * 
   * 实现方法:
   * 1. 自执行函数
   * 2. 函数重写
   * 
   * 可以观察一下点击下列button时候js的执行逻辑
   * */ 

  // some function
  function logText( param1 ) {
    if( param1 == 1 ) {
      console.log( 111 );
    } else if( param1 == 2 ) {
      console.log( 2222 );
    } else {
      console.log( 333333 );
    }
  }

  // execute himself
  var logText_lazy_execute = function( param1 ) {
    if( param1 == 1 ) {
      return () => {
        console.log( 111 );
      }
    } else if( param1 == 2 ) {
      return () => {
        console.log( 2222 );
      }
    } else {
      return () => {
        console.log( 333333 );
      }
    }
  }()

  // function rewrite
  var logText_lazy_rewrite = function( param1 ) {
    if( param1 == 1 ) {
      logText_lazy_rewrite = function() {
        console.log( 111 );
      }
    } else if( param1 == 2 ) {
      logText_lazy_rewrite = function() {
        console.log( 2222 );
      }
    } else {
      logText_lazy_rewrite = function() {
        console.log( 33333 );
      }
    }
    logText_lazy_rewrite( param1 )
  }

  </script>

  <div>
    <h1> hahaha </h1>
    <button onclick="logText( 1 )" > hahaha </button>
    <button onclick="logText( 2 )" > hahaha </button>
    <button onclick="logText( 3 )" > hahaha </button>
    <br/>
    <h1> execute function </h1>
    <button onclick="logText_lazy_execute( 1 )" > execute himself </button>
    <br/>
    <button onclick="logText_lazy_execute( 2 )" > execute himself </button>
    <br/>
    <button onclick="logText_lazy_execute( 3 )" > execute himself </button>
    <br/>
    <h1> rewrite function </h1>
    <button onclick="logText_lazy_rewrite( 1 )" > rewrite function </button>
    <br/>
    <button onclick="logText_lazy_rewrite( 2 )" > rewrite function </button>
    <br/>
    <button onclick="logText_lazy_rewrite( 3 )" > rewrite function </button>
  </div>
  
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值