


JavaScript-Designmuster: Ein genauerer Blick auf effektives Design

Einführung
<p>Solide Entwurfsmuster sind die Grundbausteine wartbarer Softwareanwendungen. Wenn Sie schon einmal an einem technischen Vorstellungsgespräch teilgenommen haben, werden Sie es lieben, wenn Ihnen diese Fragen gestellt werden. In diesem Tutorial behandeln wir einige Muster, die Sie schon heute verwenden können.Was sind Designmuster?
<p>Entwurfsmuster sind wiederverwendbare Softwarelösungen<p>Einfach ausgedrückt sind Entwurfsmuster wiederverwendbare Softwarelösungen für bestimmte Arten von Problemen, die häufig während der Softwareentwicklung auftreten. Nach jahrelanger Softwareentwicklungspraxis haben Experten Wege gefunden, ähnliche Probleme zu lösen. Diese Lösungen wurden in Entwurfsmuster gekapselt. Also:
- Muster sind bewährte Lösungen für Softwareentwicklungsprobleme
- Muster sind erweiterbar, da sie normalerweise strukturiert sind und Regeln haben, die Sie befolgen sollten
- Muster können zur Lösung ähnlicher Probleme wiederverwendet werden
Arten von Designmustern
<p>In der Softwareentwicklung werden Entwurfsmuster normalerweise in mehrere Kategorien unterteilt. Wir werden die drei wichtigsten in diesem Tutorial behandeln. Hier eine kurze Erklärung:- Das Create-Muster konzentriert sich auf Methoden zum Erstellen von Objekten oder Klassen. Das mag einfach klingen (und ist es in manchen Fällen auch), aber große Anwendungen erfordern die Kontrolle über den Objekterstellungsprozess. <p>
- Struktur Entwurfsmuster konzentrieren sich auf Möglichkeiten, Beziehungen zwischen Objekten zu verwalten, um Anwendungen auf skalierbare Weise zu erstellen. Ein wichtiger Aspekt von Strukturmustern besteht darin, sicherzustellen, dass Änderungen an einem Teil der Anwendung keine Auswirkungen auf alle anderen Teile haben. <p>
- Das Verhaltensmuster konzentriert sich auf die Kommunikation zwischen Objekten.
Hinweise zu Klassen in JavaScript
<p>Wenn Sie über Entwurfsmuster lesen, werden Sie häufig Verweise auf Klassen und Objekte sehen. Dies kann verwirrend sein, da JavaScript nicht wirklich über ein Konstrukt namens „Klasse“ verfügt; der korrektere Begriff ist „Datentyp“.Datentypen in JavaScript
<p>JavaScript ist eine objektorientierte Sprache, in der Objekte mit dem Konzept der prototypischen Vererbung von anderen Objekten erben. Datentypen können durch die Definition sogenannter Konstruktoren wie folgt erstellt werden:function Person(config) { this.name = config.name; this.age = config.age; } Person.prototype.getAge = function() { return this.age; }; var tilo = new Person({name:"Tilo", age:23 }); console.log(tilo.getAge());
Person
数据类型上定义方法时使用 prototype
。由于多个 Person
对象将引用相同的原型,因此这允许 getAge()
方法由 Person
数据类型的所有实例共享,而不是为每个实例重新定义它。此外,任何继承自 Person
的数据类型都可以访问 getAge()
-Methode.
Umgang mit der Privatsphäre
<p>Ein weiteres häufiges Problem in JavaScript ist, dass es keine wirklich privaten Variablen gibt. Allerdings können wir Schließungen nutzen, um Privatsphäre zu simulieren. Betrachten Sie den folgenden Codeausschnitt:var retinaMacbook = (function() { //Private variables var RAM, addRAM; RAM = 4; //Private method addRAM = function (additionalRAM) { RAM += additionalRAM; }; return { //Public variables and methods USB: undefined, insertUSB: function (device) { this.USB = device; }, removeUSB: function () { var device = this.USB; this.USB = undefined; return device; } }; })();
retinaMacbook
-Objekt mit öffentlichen und privaten Variablen und Methoden erstellt. So verwenden wir es:
retinaMacbook.insertUSB("myUSB"); console.log(retinaMacbook.USB); //logs out "myUSB" console.log(retinaMacbook.RAM) //logs out undefined
Kreativer Designmodus
<p>Es gibt viele verschiedene Arten kreativer Designmuster, aber wir werden in diesem Tutorial zwei davon behandeln: Builder und Prototypen. Ich finde, dass diese oft genug verwendet werden, um Anlass zur Sorge zu geben.Builder-Muster
<p>Das Builder-Muster wird häufig in der Webentwicklung verwendet, und Sie haben es möglicherweise schon einmal verwendet, ohne es zu merken. Vereinfacht ausgedrückt kann dieses Muster wie folgt definiert werden:<p>Das Application Builder-Muster ermöglicht es uns, Objekte zu erstellen, indem wir einfach deren Typ und Inhalt angeben. Wir müssen das Objekt nicht explizit erstellen.<p>Zum Beispiel haben Sie dies möglicherweise unzählige Male in jQuery getan:
var myDiv = $('<div id="myDiv">This is a div.</div>'); //myDiv now represents a jQuery object referencing a DOM node. var someText = $('<p/>'); //someText is a jQuery object referencing an HTMLParagraphElement var input = $('<input />');
<div/>
元素。在第二个中,我们传入了一个空的 <p>
标签。在最后一个中,我们传入了 <input />
元素。这三个的结果都是相同的:我们返回了一个引用 DOM 节点的 jQuery 对象。
<p>$
变量采用了jQuery中的Builder模式。在每个示例中,我们都返回了一个 jQuery DOM 对象,并且可以访问 jQuery 库提供的所有方法,但我们从未显式调用 document.createElement
。 JS 库在幕后处理了所有这些事情。
<p>想象一下,如果我们必须显式创建 DOM 元素并向其中插入内容,那将需要耗费多少工作!通过利用构建器模式,我们能够专注于对象的类型和内容,而不是显式创建它。
原型模式
<p>前面,我们介绍了如何通过函数在 JavaScript 中定义数据类型,以及如何向对象的prototype
添加方法。原型模式允许对象通过原型从其他对象继承。
<p>原型模式是通过克隆基于现有对象的模板来创建对象的模式。<p>这是在 JavaScript 中实现继承的一种简单而自然的方式。例如:
var Person = { numFeet: 2, numHeads: 1, numHands:2 }; //Object.create takes its first argument and applies it to the prototype of your new object. var tilo = Object.create(Person); console.log(tilo.numHeads); //outputs 1 tilo.numHeads = 2; console.log(tilo.numHeads) //outputs 2
Person
对象中的属性(和方法)应用于 tilo
对象的原型。如果我们希望它们不同,我们可以重新定义 tilo
对象的属性。
<p>在上面的例子中,我们使用了 Object.create()
。但是,Internet Explorer 8 不支持较新的方法。在这些情况下,我们可以模拟它的行为:
var vehiclePrototype = { init: function (carModel) { this.model = carModel; }, getModel: function () { console.log( "The model of this vehicle is " + this.model); } }; function vehicle (model) { function F() {}; F.prototype = vehiclePrototype; var f = new F(); f.init(model); return f; } var car = vehicle("Ford Escort"); car.getModel();
Object.create()
时指定。尽管如此,原型模式展示了对象如何从其他对象继承。
结构设计模式
<p>在弄清楚系统应该如何工作时,结构设计模式非常有用。它们使我们的应用程序能够轻松扩展并保持可维护性。我们将研究本组中的以下模式:复合模式和外观模式。复合模式
<p>复合模式是您之前可能使用过但没有意识到的另一种模式。<p>复合模式表示可以像对待组中的单个对象一样对待一组对象。<p>那么这是什么意思呢?好吧,考虑一下 jQuery 中的这个示例(大多数 JS 库都有与此等效的示例):
$('.myList').addClass('selected'); $('#myItem').addClass('selected'); //dont do this on large tables, it's just an example. $("#dataTable tbody tr").on("click", function(event){ alert($(this).text()); }); $('#myButton').on("click", function(event) { alert("Clicked."); });
selected
类添加到 .myList
选择器选取的所有项目中,但在处理单个 DOM 元素 #myItem
时,我们可以使用相同的方法。同样,我们可以使用 on()
方法在多个节点上附加事件处理程序,或者通过相同的 API 在单个节点上附加事件处理程序。
<p>通过利用复合模式,jQuery(和许多其他库)为我们提供了一个简化的 API。
<p>复合模式有时也会引起问题。在 JavaScript 等松散类型语言中,了解我们正在处理单个元素还是多个元素通常会很有帮助。由于复合模式对两者使用相同的 API,因此我们经常会误认为其中一个,并最终出现意想不到的错误。某些库(例如 YUI3)提供两种单独的获取元素的方法(Y.one()
与 Y.all()
)。
外观模式
<p>这是我们认为理所当然的另一个常见模式。事实上,这是我最喜欢的之一,因为它很简单,而且我已经看到它被到处使用来帮助解决浏览器不一致的问题。以下是外观模式的含义:<p>外观模式为用户提供了一个简单的界面,同时隐藏了其底层的复杂性。<p>外观模式几乎总能提高软件的可用性。再次以 jQuery 为例,该库中比较流行的方法之一是
ready()
方法:
$(document).ready(function() { //all your code goes here... });
ready()
方法实际上实现了一个门面。如果您查看源代码,您会发现以下内容:
ready: (function() { ... //Mozilla, Opera, and Webkit if (document.addEventListener) { document.addEventListener("DOMContentLoaded", idempotent_fn, false); ... } //IE event model else if (document.attachEvent) { // ensure firing before onload; maybe late but safe also for iframes document.attachEvent("onreadystatechange", idempotent_fn); // A fallback to window.onload, that will always work window.attachEvent("onload", idempotent_fn); ... } })
ready()
方法并不那么简单。 jQuery 规范了浏览器的不一致,以确保在适当的时间触发 ready()
。但是,作为开发人员,您会看到一个简单的界面。
<p>大多数外观模式示例都遵循这一原则。在实现时,我们通常依赖于底层的条件语句,但将其作为一个简单的界面呈现给用户。实现此模式的其他方法包括 animate()
和 css()
。你能想到为什么这些会使用外观模式吗?
行为设计模式
<p>任何面向对象的软件系统都会在对象之间进行通信。不组织这种沟通可能会导致难以发现和修复的错误。行为设计模式规定了组织对象之间通信的不同方法。在本节中,我们将研究观察者模式和中介者模式。观察者模式
<p>观察者模式是我们将要经历的两种行为模式中的第一种。它是这样说的:<p>在观察者模式中,主题可以拥有对其生命周期感兴趣的观察者列表。每当主题做了一些有趣的事情时,它都会向其观察者发送通知。如果观察者不再有兴趣听主题,则主题可以将其从列表中删除。<p>听起来很简单,对吧?我们需要三种方法来描述这种模式:
-
publish(data)
:当主题有通知要发出时调用。某些数据可以通过此方法传递。 -
subscribe(observer)
:由主题调用以将观察者添加到其观察者列表中。 -
unsubscribe(observer)
:由主题调用,从其观察者列表中删除观察者。
on()
或 attach()
方法,一个 trigger()
或 fire()
方法,以及一个 off()
或 detach()
方法。考虑以下代码片段:
//We just create an association between the jQuery events methods
//and those prescribed by the Observer Pattern but you don't have to. var o = $( {} ); $.subscribe = o.on.bind(o); $.unsubscribe = o.off.bind(o); $.publish = o.trigger.bind(o); // Usage document.on( 'tweetsReceived', function(tweets) { //perform some actions, then fire an event $.publish('tweetsShow', tweets); }); //We can subscribe to this event and then fire our own event. $.subscribe( 'tweetsShow', function() { //display the tweets somehow .. //publish an action after they are shown. $.publish('tweetsDisplayed); }); $.subscribe('tweetsDisplayed, function() { ... });
调解者模式
<p>我们要讨论的最后一个模式是中介者模式。它与观察者模式类似,但有一些显着的差异。<p>中介者模式提倡使用单个共享主题来处理与多个对象的通信。所有对象都通过中介者相互通信。<p>现实世界中一个很好的类比是空中交通塔,它负责处理机场和航班之间的通信。在软件开发领域,当系统变得过于复杂时,通常会使用中介者模式。通过放置中介,可以通过单个对象来处理通信,而不是让多个对象相互通信。从这个意义上说,中介者模式可以用来替代实现观察者模式的系统。 <p>在这个要点中,Addy Osmani 提供了中介者模式的简化实现。让我们谈谈如何使用它。想象一下,您有一个 Web 应用程序,允许用户单击专辑并播放其中的音乐。您可以像这样设置中介者:
$('#album').on('click', function(e) { e.preventDefault(); var albumId = $(this).id(); mediator.publish("playAlbum", albumId); }); var playAlbum = function(id) { … mediator.publish("albumStartedPlaying", {songList: [..], currentSong: "Without You"}); }; var logAlbumPlayed = function(id) { //Log the album in the backend }; var updateUserInterface = function(album) { //Update UI to reflect what's being played }; //Mediator subscriptions mediator.subscribe("playAlbum", playAlbum); mediator.subscribe("playAlbum", logAlbumPlayed); mediator.subscribe("albumStartedPlaying", updateUserInterface);
结论
<p>过去已经有人成功应用过它。<p>设计模式的伟大之处在于,过去已经有人成功地应用过它。有许多开源代码可以在 JavaScript 中实现各种模式。作为开发人员,我们需要了解现有的模式以及何时应用它们。我希望本教程可以帮助您在回答这些问题上更进一步。
补充阅读
<p>本文的大部分内容可以在 Addy Osmani 所著的优秀的《学习 JavaScript 设计模式》一书中找到。这是一本根据知识共享许可免费发布的在线图书。本书广泛涵盖了许多不同模式的理论和实现,包括普通 JavaScript 和各种 JS 库。我鼓励您在开始下一个项目时将其作为参考。Das obige ist der detaillierte Inhalt vonJavaScript-Designmuster: Ein genauerer Blick auf effektives Design. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Dieser Handbuch zeigt, wie PDF -Dateien in WordPress -Posts und Seiten mit einem WordPress -PDF -Plugin eingebettet und geschützt werden. PDFs bieten ein benutzerfreundliches, allgemein zugängliches Format für verschiedene Inhalte, von Katalogen bis zu Präsentationen. Diese Methode ens

WordPress ist für Anfänger leicht zu beginnen. 1. Nach dem Anmeldung im Hintergrund ist die Benutzeroberfläche intuitiv und das einfache Dashboard bietet alle erforderlichen Funktionslinks. 2. Grundlegende Vorgänge umfassen das Erstellen und Bearbeiten von Inhalten. Der Wysiwyg -Editor vereinfacht die Erstellung von Inhalten. 3. Anfänger können die Website-Funktionen durch Plug-Ins und Themen erweitern, und die Lernkurve existiert, kann aber durch das Üben gemeistert werden.

Die Leute verwenden WordPress wegen ihrer Kraft und Flexibilität. 1) WordPress ist ein Open -Source -CMS mit einer starken Benutzerfreundlichkeit und Skalierbarkeit, die für verschiedene Website -Anforderungen geeignet ist. 2) Es hat reichhaltige Themen und Plugins, ein riesiges Ökosystem und eine starke Unterstützung der Gemeinschaft. 3) Das Arbeitsprinzip von WordPress basiert auf Themen, Plug-Ins und Kernfunktionen und verwendet PHP und MySQL, um Daten zu verarbeiten und die Leistungsoptimierung zu unterstützen.

Die Kernversion von WordPress ist kostenlos, aber andere Gebühren können während der Verwendung anfallen. 1. Domainnamen und Hosting -Dienste erfordern eine Zahlung. 2. können fortgeschrittene Themen und Plug-Ins aufgeladen werden. 3.. Professionelle Dienstleistungen und fortschrittliche Funktionen können berechnet werden.

WordPress selbst ist kostenlos, kostet jedoch zusätzlich: 1. WordPress.com bietet ein Paket von kostenlos bis bezahlt, wobei die Preise zwischen ein paar Dollar pro Monat bis zu Dutzenden von Dollar reichen. 2. 3. Die meisten Plug-Ins und Themen sind kostenlos, und der bezahlte Preis liegt zwischen Dutzenden und Hunderten von Dollar. Durch die Auswahl des richtigen Hosting-Dienstes, die Verwendung von Plug-Ins und Themen und regelmäßige Aufrechterhaltung und Optimierung können die Kosten von WordPress effektiv gesteuert und optimiert werden.

WordPressIsGoodforenualywebProjectDuetoitsverseSatilityasacms.itexcelsin: 1) Benutzerfreundlichkeit, erlaubt Easywebsitesetup; 2) Flexibilität und Kustomisierung mit

Wix ist für Benutzer geeignet, die keine Programmiererfahrung haben, und WordPress ist für Benutzer geeignet, die mehr Kontroll- und Erweiterungsfunktionen wünschen. 1) Wix bietet Drag-and-Drop-Editoren und reichhaltige Vorlagen und erleichtert es, eine Website schnell zu erstellen. 2) Als Open-Source-CMS verfügt WordPress über eine riesige Community- und Plug-in-Ökosystem, die eine eingehende Anpassung und Erweiterung unterstützt.

WordPress ist ein Content Management System (CMS). Es bietet Content Management, Benutzerverwaltung, Themen und Plug-in-Funktionen, um die Erstellung und Verwaltung von Website-Inhalten zu unterstützen. Das Arbeitsprinzip umfasst Datenbankverwaltung, Vorlagensysteme und Plug-in-Architektur, die für eine Vielzahl von Anforderungen von Blogs bis hin zu Unternehmenswebsites geeignet sind.
