阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      CoffeeScript 修饰模式

      修饰模式

      问题

      你有一组数据,需要在多个过程、可能变换的方式下处理。

      解决方案

      使用修饰模式来构造如何更改应用。

      miniMarkdown = (line) ->
          if match = line.match /^(#+)\s*(.*)$/
              headerLevel = match[1].length
              headerText = match[2]
              "#{headerText}"
          else
              if line.length > 0
                  "#{line}"
              else
                  ''
      
      stripComments = (line) ->
          line.replace /\s*\/\/.*$/, '' # Removes one-line, double-slash C-style comments
      
      class TextProcessor
          constructor: (@processors) ->
      
          reducer: (existing, processor) ->
              if processor
                  processor(existing or '')
              else
                  existing
          processLine: (text) ->
              @processors.reduce @reducer, text
          processString: (text) ->
              (@processLine(line) for line in text.split("\n")).join("\n")
      
      exampleText = '''
                    # A level 1 header
                    A regular line
                    // a comment
                    ## A level 2 header
                    A line // with a comment
                    '''
      
      processor = new TextProcessor [stripComments, miniMarkdown]
      
      processor.processString exampleText
      
      # => "A level 1 header\nA regular line\n\nA level 2 header\nA line"
      

      结果

      A level 1 header
      A regular line
      
      A level 1 header
      A line
      

      讨论

      TextProcessor 服务有修饰的作用,可将个人、专业文本处理器绑定在一起。这使 miniMarkdown 和 stripComments 组件只专注于处理一行文本。未来的开发人员只需要编写函数返回一个字符串,并将它添加到阵列的处理器即可。

      我们甚至可以修改现有的修饰对象动态:

      smilies =
          ':)' : "smile"
          ':D' : "huge_grin"
          ':(' : "frown"
          ';)' : "wink"
      
      smilieExpander = (line) ->
          if line
              (line = line.replace symbol, "") for symbol, text of smilies
          line
      
      processor.processors.unshift smilieExpander
      
      processor.processString "# A header that makes you :) // you may even laugh"
      
      # => "A header that makes you "
      
      processor.processors.shift()
      
      # => "A header that makes you :)"
      
      卖前端学习教程

      只需几十元,就能买到培训班的内部教程!开启高薪之路!

      零基础小白阿里P7的教程都有!

      同时长期收购所有培训班的前端教程

      目录
      目录