代码之家  ›  专栏  ›  技术社区  ›  Aaron

使用JavaScript实现设计模式的例子有哪些?

  •  17
  • Aaron  · 技术社区  · 16 年前

    我是一个使用JavaScript的中等技能程序员,但我不是大师。我知道你可以用它做一些非常强大的事情,除了基本的DOM操作,我还没见过其他什么。我想知道人们是否可以提供一些使用JavaScript的传统设计模式概念的例子,如工厂方法、单例等。在什么情况下,这些模式会在web上使用?

    10 回复  |  直到 13 年前
        1
  •  8
  •   Mike Stone    16 年前

    我只是想添加我最喜欢的JavaScript模式,这是我从Jonathan Rauch推荐的Pro JavaScript设计模式中学到的。

    它是名称空间单例模式。基本上,您可以通过单例创建名称空间,单例允许您隐藏方法和变量以防外部使用。隐藏/公开的方法实际上是隐藏的,因为它们是在闭包中定义的。

    var com = window.com || {};
    com.mynamespace = com.mynamespace || {};
    com.mynamespace.newpackage = (function() {
        var myPrivateVariable = "hidden";
        var myPublicVariable = "exposed";
    
        function myPrivateMethod() {
            return "also hidden";
        }
    
        function myPublicMethod() {
            return "also exposed";
        }
    
        return {
            myPublicMethod: myPublicMethod,
            myPublicVariable: myPublicVariable
        };
    })();
    
        2
  •  7
  •   Mike Stone    16 年前

    Nickolay提到了这一点,但设计模式在存在巨大差异的语言之间并不一致。我以前读过(并同意)设计模式通常是语言中缺少功能的标志。

    作为一个完美的例子,“工厂”模式在某些语言中是完全不必要的,Ruby就是我想到的例子(因为对象构造只是类实例上的一个方法):

    # create a factory for MyObject
    my_factory = MyObject
    instance_1 = my_factory.new
    
    # change the factory to another class
    my_factory = MyOtherObject
    instance_2 = my_factory.new
    

        3
  •  3
  •   XML    13 年前

    这是一个好消息 自由的 Addy Osmani的在线书籍,介绍Javascript设计模式: Essential JavaScript Design Patterns For Beginners, Volume 1

        4
  •  3
  •   Nickolay    8 年前

    The singleton design pattern in JavaScript

    哦,我的上帝。我说不出话来。

    To OP:是的,在某种意义上你当然可以,但是一些模式,正如你习惯的那样,不像在Java中那样可见。例如,singleton只是一个对象:

    var singleton = {
        sayHello: function() {
           alert("Hello!")
        }
    };
    

    维基百科就有这样一个例子 Factory 在JS中。

        5
  •  2
  •   Huppie    16 年前

    Bernie's Better Animation Class Strategy 设计模式。Bernie在描述为什么应该使用策略模式方面做得很好,但遗憾的是,他没有确切解释代码是如何工作的。然后,在使用设计模式参考时,再次查看animator.js中的代码和注释,以获得如何使用策略模式的良好示例。

    例子:

    // This object controls the progress of the animation 
    ex1 = new Animator();
    // The Animator's subjects define its behaviour 
    ex1.addSubject(updateButton);
    function updateButton(value) {
        $('ex1Button').innerHTML = "Progress: " + Math.round(value * 100) + "%";
    }
    
    // now click below: each click to the button calls ex1.toggle()
    
        6
  •  1
  •   Community CDub    7 年前

    What is this practice called in JavaScript?

    这是自调用设计模式。在我开始编写Javascripting之前,我从未见过它。

        7
  •  0
  •   Eugene Lazutkin    16 年前

    我怀疑他们可以-这里有一个单身的例子:

    The singleton design pattern in JavaScript

        8
  •  0
  •   Jonathan Rauch    16 年前

    当然可以。这是一本关于这个主题的书:
    Pro JavaScript Design Patterns
    以下是Factory模式的一个示例:
    Factory pattern in Javascript

        9
  •  0
  •   Vorleak Chy    16 年前

    我想在这里补充我作为一个小组学习的内容,并讨论C#和JavaScript中的设计模式。在会议期间,我最想做的事情是C#guy用JavaScript编写代码,而JavaScript guy也是如此。 离开会议后,我试图在家里学到更多,并在这里写博客 http://tech.wowkhmer.com/category/Design-Patterns.aspx 对于C#和JavaScript。

        10
  •  0
  •   ken    15 年前

    Listen JustinDiaz谈到Javascript的设计模式。这篇演讲也是基于他上面提到的《Pro Javascript技术》一书。这次演讲大约在谷歌I/O上进行45分钟