revealing pattern patrones patron node diseño creacion javascript design-patterns singleton strategy-pattern factory-method

javascript - pattern - patrones de diseño node js



¿Cuáles son algunos ejemplos de implementaciones de patrones de diseño usando JavaScript? (10)

Claro que pueden Aquí hay un libro sobre el tema:
Patrones de diseño de JavaScript Pro
Aquí hay un ejemplo del patrón de fábrica:
Patrón de fábrica en Javascript

Soy un programador moderadamente habilidoso que usa JavaScript pero no soy un gurú. Sé que puedes hacer algunas cosas bastante poderosas con él, simplemente no he visto mucho más que la manipulación bastante básica de DOM. Me pregunto si las personas podrían proporcionar algunos ejemplos de conceptos de patrones de diseño tradicionales como Factory Method, Singleton, etc. usando JavaScript. ¿En qué casos se usarían estos patrones en la web?


Solo quería agregar mi patrón de JavaScript favorito que aprendí de Pro JavaScript Design Patterns que Jonathan Rauch ya recomendó.

Es el patrón de singleton del espacio de nombres. Básicamente, crea espacios de nombres a través de singletons que le permiten ocultar métodos y variables de uso externo. Los métodos ocultos / expuestos en realidad están ocultos porque están definidos dentro del cierre.

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 }; })();



Recientemente utilicé Bernie''s Better Animation Class que hace un uso extensivo del Patrón de Diseño de Estrategia . Bernie hace un gran trabajo al describir por qué se debe usar el Patrón de estrategia, pero lamentablemente no explica exactamente cómo funciona el código. Por otra parte, cuando utilice una referencia de Patrones de diseño, eche un vistazo al código y a los comentarios en animator.js para ver un buen ejemplo de cómo usar el Patrón de estrategia.

Ejemplo:

// 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()


Me gustaría agregar aquí lo que he estudiado como grupo con una discusión sobre los patrones de diseño tanto en C # como en JavaScript. Lo que más me gusta durante la reunión es que el chico de C # escribe códigos en JavaScript y lo mismo para el chico de JavaScript. Después de abandonar la reunión, intento aprender más en casa y hacer un blog aquí http://tech.wowkhmer.com/category/Design-Patterns.aspx para C # y JavaScript.


Escucha a Justin Diaz hablando sobre el patrón de diseño para Javascript. La charla también se basa en su libro Pro Javascript Techniques mencionado anteriormente. La charla dura unos 45 minutos en Google I / O



@jamting:

El patrón de diseño singleton en JavaScript

Oh Dios mío. Estoy sin palabras.

Para OP: sí, por supuesto que puede en cierto sentido, pero algunos patrones, como usted está acostumbrado a ellos, no son tan visibles, como en Java. Por ejemplo, singleton simplemente sería un objeto:

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

Wikipedia tiene un ejemplo de Factory en JS.


¿Cómo se llama esta práctica en JavaScript?

Este es el patrón de diseño de auto invocación. Nunca lo había visto hasta que comencé Javascripting.


Nickolay se refirió a esto, pero los patrones de diseño no son consistentes entre los idiomas que tienen diferencias drásticas. He leído antes (y estoy de acuerdo con) que un patrón de diseño a menudo es una señal de que faltan características en el idioma.

Como un ejemplo perfecto, el patrón "Factory" es completamente innecesario en algunos idiomas, Ruby es el ejemplo en el que estoy pensando (porque la construcción de objetos es solo un método en la instancia de 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

Cada vez que aplique un patrón de diseño a un idioma diferente al inicialmente desarrollado, asegúrese de considerar si es REALMENTE necesario y de qué manera podría mejorarlo con las nuevas funciones de idioma disponibles. Los patrones de diseño son solo una guía, siempre debe considerar si el uso que pretende realmente necesita el patrón, o si puede ser adoptado de una mejor manera en su caso.