使用JavaScript实现设计模式的一些示例是什么?

时间:2020-03-05 18:42:29  来源:igfitidea点击:

我是使用JavaScript的中等技能的程序员,但我不是专家。我知道我们可以用它来做一些非常强大的事情,除了基本的DOM操作之外,我只见过很多其他东西。我想知道人们是否可以使用JavaScript提供一些传统设计模式概念的示例,例如Factory Method,Singleton等。在什么情况下,这些模式可用于网​​络?

解决方案

回答

我怀疑他们可以举一个Singleton的例子:

JavaScript中的单例设计模式

回答

@干扰

The singleton design pattern in JavaScript

我的天啊。我无语了。

对OP:是的,从某种意义上讲当然可以,但是我们习惯的某些模式并不像Java中那样可见。例如,单例将仅仅是一个对象:

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

维基百科上有一个JS工厂的例子。

回答

当然可以。这是一本关于这个主题的书:
Pro JavaScript设计模式
这是Factory模式的示例:
Javascript中的工厂模式

回答

尼古拉(Nickolay)谈到了这一点,但是设计模式在具有巨大差异的语言之间并不一致。我已经读过(并同意)设计模式通常是该语言缺少功能的标志。

作为一个完美的例子,在某些语言中,"工厂"模式是完全没有必要的,Ruby是我正在考虑的例子(因为对象构造只是Class实例上的一种方法):

# 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

每当我们将设计模式应用到与最初开发时所用的语言不同的语言时,请确保考虑它是否确实必要,以及使用可用的新语言功能可以通过哪些方法对其进行改进。设计模式只是一个指南,我们应该始终考虑我们打算使用的用途是否确实需要该模式,或者是否可以在情况下以更好的方式采用它。

回答

我只是想添加我从乔纳森·劳赫(Jonathan Rauch)推荐的专业JavaScript设计模式中学到的我最喜欢的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
    };
})();

回答

我最近使用了伯尼(Bernie)的"更好的动画"课程,该课程广泛使用了"策略设计模式"。 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()

回答

我想在这里添加我作为小组研究的内容,同时讨论Cand JavaScript中的设计模式。在会议期间,对我来说,最想想的是Cguy用JavaScript编写代码,而JavaScript家伙也是如此。
我离开会议后,尝试在家中学习更多知识,并在此处进行博客撰写
两种Cand JavaScript的http://tech.wowkhmer.com/category/Design-Patterns.aspx。

回答

听听Justin Diaz谈论Javascript的设计模式。该演讲还基于上面提到的他的《 Pro Javascript Techniques》一书。演讲在Google I / O上进行了大约45分钟

回答

在JavaScript中,这种做法叫什么?

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