5 TypeScript-Entwurfsmuster, die Sie kennen müssen
In diesem Artikel werden Ihnen 5 TypeScript-Entwurfsmuster vorgestellt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Entwurfsmuster sind Vorlagen, die Entwicklern bei der Lösung von Problemen helfen. In diesem Buch werden so viele Muster behandelt, die oft auf unterschiedliche Bedürfnisse abzielen. Sie können jedoch in drei verschiedene Gruppen eingeteilt werden:
-
Strukturmuster befassen sich mit den Beziehungen zwischen verschiedenen Komponenten (oder Klassen) und bilden neue Strukturen, um neue Funktionalität bereitzustellen. Beispiele für Strukturmuster sind
Composite
,Adapter
undDecorator
. -
行为模式将组件之间的公共行为抽象成一个独立的实体。行为模式的例子有命令、策略和我个人最喜欢的一个:
观察者模式
。 - 创建模式 专注于类的实例化,让我们更容易创建新的实体。我说的是工厂方法,单例和抽象工厂。
Composite
、Adapter
和Decorator
。单例模式
单例模式可能是最著名的设计模式之一。它是一种创建模式,因为它确保无论我们尝试实例化一个类多少次,我们都只有一个可用的实例。
处理数据库连接之类的可以单例模式,因为我们希望一次只处理一个,而不必在每个用户请求时重新连接。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
现在,虽然不能直接实例化类,但是使用getInstance
方法,可以确保不会有多个实例。在上面的示例中,可以看到包装数据库连接的伪类如何从该模式中获益。
这个事例展示了无论我们调用getInstance
方法多少次,这个连接总是相同的。
上面的运行结果:
1 2 3 4 5 |
|
工厂模式
工厂模式
是一种创建模式,就像单例模式
一样。但是,这个模式并不直接在我们关心的对象上工作,而是只负责管理它的创建。
解释一下:假设我们通过编写代码来模拟移动车辆,车有很多类型,例如汽车、自行车和飞机,移动代码应该封装在每个vehicle
类中,但是调用它们的move
方法的代码可以是通用的。
这里的问题是如何处理对象创建?可以有一个具有3个方法的单一creator
类,或者一个接收参数的方法。在任何一种情况下,扩展该逻辑以支持创建更多vehices
都需要不断增长相同的类。
但是,如果决定使用工厂方法模式,则可以执行以下操作:
现在,创建新对象所需的代码被封装到一个新类中,每个类对应一个车辆类型。这确保了如果将来需要添加车辆,只需要添加一个新类,而不需要修改任何已经存在的东西。
接着来看看,我们如何使用TypeScript
来实现这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
上面的代码很多,但我们可以使用上面的图表来理解它。本质上最后,我们关心的是自定义处理程序,这里称它为处理程序,而不是创造者,因为他们不只是创建的对象,他们也有逻辑,使用它们(moveVehicle方法)。
这个模式的美妙之处在于,如果您你要添加一个新的vehicle
类型,所要做的就是添加它的vehicle
类和它的处理程序类,而不增加任何其他类的LOC。
观察者模式
在所有的模式,我最喜欢的是观察者模式
,因为类型的行为我们可以实现它。
它是如何工作的呢?本质上,该模式表明你拥有一组观察者对象,这些对象将对被观察实体状态的变化做出反应。为了实现这一点,一旦在被观察端接收到一个更改,它就负责通过调用它的一个方法来通知它的观察者。
在实践中,此模式的实现相对简单,让我们快速查看一下代码,然后回顾一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
正如你所看到的,通过两个抽象类,我们可以定义Observer
,该观察者将表示对Observable
实体上的更改做出反应的对象。 在上面的示例中,我们假设具有一个被单击的InputElement
实体(类似于在前端具有HTML输入字段的方式),以及一个ConsoleLogger
,用于记录控制台发生的所有事情。
这种模式的优点在于,它使我们能够了解Observable
Beobachtermuster
. 🎜Der Erstellungsmodus konzentriert sich auf die Instanziierung von Klassen und erleichtert uns die Erstellung neuer Entitäten. Ich spreche von Fabrikmethoden, Singletons und abstrakten Fabriken. 🎜Singleton-Muster🎜
🎜Das Singleton-Muster ist wahrscheinlich eines der bekanntesten Designmuster. Es handelt sich um ein Erstellungsmuster, da es sicherstellt, dass unabhängig davon, wie oft wir versuchen, eine Klasse zu instanziieren, immer nur eine Instanz verfügbar ist. 🎜🎜Die Handhabung von Dingen wie Datenbankverbindungen kann im Singleton-Modus erfolgen, da wir jeweils nur eine Verbindung verarbeiten möchten, ohne bei jeder Benutzeranfrage eine erneute Verbindung herstellen zu müssen. 🎜1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
getInstance
sichergestellt werden, dass es nicht mehrere Instanzen gibt. Im obigen Beispiel können Sie sehen, wie eine Pseudoklasse, die eine Datenbankverbindung umschließt, von diesem Muster profitiert. 🎜🎜Dieses Beispiel zeigt, dass die Verbindung immer dieselbe ist, egal wie oft wir die Methode getInstance
aufrufen. 🎜🎜Die oben aufgeführten Ergebnisse: 🎜1 2 3 |
|
🎜Fabrikmuster🎜
🎜Fabrikmuster
ist ein Erstellungsmuster, genau wie Singleton-Muster
. Dieses Muster wirkt sich jedoch nicht direkt auf das Objekt aus, das uns wichtig ist, sondern verwaltet nur dessen Erstellung. 🎜🎜Erklären Sie: Angenommen, wir schreiben Code, um ein fahrendes Fahrzeug zu simulieren, z. B. Autos, Fahrräder und Flugzeuge. Der Bewegungscode sollte in jeder vehicle
-Klasse gekapselt sein code>calling them Der Code der Methode code>move kann generisch sein. 🎜🎜Die Frage hier ist, wie mit der Objekterstellung umzugehen ist. Es kann eine einzelne creator
-Klasse mit drei Methoden oder eine Methode geben, die Parameter akzeptiert. In beiden Fällen erfordert die Erweiterung der Logik zur Unterstützung der Erstellung weiterer Fahrzeuge
das Erweitern derselben Klasse. 🎜🎜Wenn Sie sich jedoch für die Verwendung des Factory-Methodenmusters entscheiden, können Sie Folgendes tun: 🎜🎜TypeScript
verwenden können, um dies zu erreichen: 🎜1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
vehicle
-Typ hinzufügen möchten, lediglich seine vehicle
-Klasse und seine Handler-Klasse hinzufügen müssen, ohne sie zu erhöhen das LOC einer anderen Klasse. 🎜🎜Observer-Muster🎜
🎜Von allen Mustern ist mein Favorit dasObserver-Muster
aufgrund des typisierten Verhaltens, das wir implementieren können. 🎜🎜Wie funktioniert es? Im Wesentlichen besagt das Muster, dass Sie über eine Reihe von Beobachterobjekten verfügen, die auf Änderungen im Zustand der beobachteten Entität reagieren. Um dies zu erreichen, ist die beobachtete Seite, sobald eine Änderung eingeht, dafür verantwortlich, ihre Beobachter durch den Aufruf einer ihrer Methoden zu benachrichtigen. 🎜🎜In der Praxis ist die Implementierung dieses Musters relativ einfach. Werfen wir einen kurzen Blick auf den Code und überprüfen ihn. 🎜1 2 3 4 5 6 |
|
Observer
definieren. Der Beobachter stellt ein Objekt dar, das auf Änderungen an der Observable
-Entität reagiert. Im obigen Beispiel gehen wir davon aus, dass wir über eine InputElement
-Entität verfügen, auf die geklickt wird (ähnlich wie bei HTML-Eingabefeldern im Frontend), und über einen ConsoleLogger
, der protokolliert Alles, was auf der Konsole passiert. 🎜🎜Der Vorteil dieses Musters besteht darin, dass es uns ermöglicht, den internen Zustand eines Observable
zu verstehen und darauf zu reagieren, ohne mit seinem internen Code herumspielen zu müssen. Wir können weiterhin Beobachter hinzufügen, die andere Aktionen ausführen, sogar Beobachter, die auf bestimmte Ereignisse reagieren, und ihren Code entscheiden lassen, was mit jeder Benachrichtigung geschehen soll. 🎜装饰模式
装饰模式试图在运行时向现有对象添加行为。 从某种意义上说,我们可以将其视为动态继承,因为即使没有创建新类来添加行为,我们也正在创建具有扩展功能的新对象。
这样考虑:假设我们拥有一个带有move
方法的Dog
类,现在您想扩展其行为,因为我们想要一只超级狗和一只可以游泳的狗。
通常,我们需要在 Dog 类中添加move
行为,然后以两种方式扩展该类,即SuperDog
和SwimmingDog
类。 但是,如果我们想将两者混合在一起,则必须再次创建一个新类来扩展它们的行为,但是,有更好的方法。
组合让我们可以将自定义行为封装在不同的类中,然后使用该模式通过将原始对象传递给它们的构造函数来创建这些类的新实例。 让我们看一下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
注意几个细节:
- 实际上,
SuperDecorator
类扩展了Animal
类,与Dog
类扩展了相同的类。 这是因为装饰器需要提供与其尝试装饰的类相同的公共接口。 -
SuperDecorator
类是abstract
,这意味着并没有使用它,只是使用它来定义构造函数,该构造函数会将原始对象的副本保留在受保护的属性中。 公共接口的覆盖是在自定义装饰器内部完成的。 -
SuperAnimal
和SwimmingAnimal
是实际的装饰器,它们是添加额外行为的装饰器。
进行此设置的好处是,由于所有装饰器也间接扩展了Animal
类,因此如果你要将两种行为混合在一起,则可以执行以下操作:
1 2 3 |
|
Composite(组合)
关于Composite模式,其实就是组合模式,又叫部分整体模式,这个模式在我们的生活中也经常使用。
比如编写过前端的页面,肯定使用过<p></p>
等标签定义一些格式,然后格式之间互相组合,通过一种递归的方式组织成相应的结构,这种方式其实就是组合,将部分的组件镶嵌到整体之中。
关于此模式的有趣之处在于,它不是一个简单的对象组,它可以包含实体或实体组,每个组可以同时包含更多组,这就是我们所说的树。
看一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
在上面的示例中,我们可以将product
放入Box
中,也可以将Box
放入其他Box
中,这是组合的经典示例。因为我们要实现的是获得完整的交付价格,因此需要在大box
里添加每个元素的价格(包括每个小box
的价格)。
上面运行的结果:
1 2 3 4 5 6 |
|
因此,在处理遵循同一接口的多个对象时,请考虑使用此模式。 通过将复杂性隐藏在单个实体(组合本身)中,您会发现它有助于简化与小组的互动方式。
今天的分享就到这里了,感谢大家的观看,我们下期再见。
原文地址:https://blog.bitsrc.io/design-patterns-in-typescript-e9f84de40449
作者:Fernando Doglio
译文地址:https://segmentfault.com/a/1190000025184682
更多编程相关知识,请访问:编程课程!!
Das obige ist der detaillierte Inhalt von5 TypeScript-Entwurfsmuster, die Sie kennen müssen. 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

Im Java-Framework besteht der Unterschied zwischen Entwurfsmustern und Architekturmustern darin, dass Entwurfsmuster abstrakte Lösungen für häufige Probleme beim Softwaredesign definieren und sich dabei auf die Interaktion zwischen Klassen und Objekten konzentrieren, beispielsweise Fabrikmuster. Architekturmuster definieren die Beziehung zwischen Systemstrukturen und Modulen und konzentrieren sich auf die Organisation und Interaktion von Systemkomponenten, wie z. B. eine geschichtete Architektur.

Geschrieben von YBBCapital Researcherac-Core: Ethereum Fragmentierungsproblem und Openintents Framework: Breakthrough-Methode-Quelle von ERC-7683: @Ethereumfndnl2 und die boomende Entwicklung von DEFI haben zur zunehmenden Fragmentierung der Ethereum-Liquidität geführt. Die Liquidität der Vermögenswerte ist zwischen L1 und vielen L2s verteilt, und es fehlt eine wirksame Verbindung zwischen verschiedenen Plattformen, wie isolierten "kleinen Pools", wodurch die Gesamtwirkungsgrad von Ethereum behindert wird. Im Jahr 2024 fügte Ethereum mehr als 100 neue Ketten hinzu, was wie ein großes Einkaufszentrum mit einer Vielzahl von Produkten ist, aber es erfordert eine Abrechnung in verschiedenen Währungen. Um dieses Problem zu lösen, veröffentlichte die Ethereum Foundation am 20. Februar OpenIntentsF

Das Dekoratormuster ist ein strukturelles Entwurfsmuster, das das dynamische Hinzufügen von Objektfunktionen ermöglicht, ohne die ursprüngliche Klasse zu ändern. Es wird durch die Zusammenarbeit von abstrakten Komponenten, konkreten Komponenten, abstrakten Dekoratoren und konkreten Dekoratoren implementiert und kann Klassenfunktionen flexibel erweitern, um sich ändernden Anforderungen gerecht zu werden. In diesem Beispiel werden Milch- und Mokka-Dekoratoren zu Espresso für einen Gesamtpreis von 2,29 $ hinzugefügt, was die Leistungsfähigkeit des Dekoratormusters bei der dynamischen Änderung des Verhaltens von Objekten demonstriert.

Zu den Vorteilen der Verwendung von Entwurfsmustern in Java-Frameworks gehören: verbesserte Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Zu den Nachteilen gehören Komplexität, Leistungsaufwand und eine steile Lernkurve aufgrund übermäßiger Nutzung. Praktischer Fall: Der Proxy-Modus wird zum verzögerten Laden von Objekten verwendet. Setzen Sie Entwurfsmuster mit Bedacht ein, um ihre Vorteile zu nutzen und ihre Nachteile zu minimieren.

Das Guice-Framework wendet eine Reihe von Entwurfsmustern an, darunter: Singleton-Muster: Durch die @Singleton-Annotation wird sichergestellt, dass eine Klasse nur eine Instanz hat. Factory-Methodenmuster: Erstellen Sie eine Factory-Methode über die Annotation @Provides und rufen Sie die Objektinstanz während der Abhängigkeitsinjektion ab. Strategiemodus: Kapseln Sie den Algorithmus in verschiedene Strategieklassen und geben Sie die spezifische Strategie über die Annotation @Named an.

TDD wird verwendet, um hochwertigen PHP-Code zu schreiben. Die Schritte umfassen: Testfälle schreiben, die erwartete Funktionalität beschreiben und sie zum Scheitern bringen. Schreiben Sie Code so, dass nur die Testfälle ohne übermäßige Optimierung oder detailliertes Design erfolgreich sind. Nachdem die Testfälle bestanden wurden, optimieren und überarbeiten Sie den Code, um die Lesbarkeit, Wartbarkeit und Skalierbarkeit zu verbessern.

TDD und Entwurfsmuster verbessern die Codequalität und Wartbarkeit. TDD stellt die Testabdeckung sicher, verbessert die Wartbarkeit und verbessert die Codequalität. Entwurfsmuster unterstützen TDD durch Prinzipien wie lose Kopplung und hohe Kohäsion und stellen sicher, dass Tests alle Aspekte des Anwendungsverhaltens abdecken. Es verbessert auch die Wartbarkeit und Codequalität durch Wiederverwendbarkeit, Wartbarkeit und robusteren Code.

PHP-Entwurfsmuster bieten bekannte Lösungen für häufige Probleme in der Softwareentwicklung. Zu den gängigen Mustertypen gehören schöpferische Muster (z. B. Fabrikmethodenmuster), strukturelle Muster (z. B. Dekorationsmuster) und Verhaltensmuster (z. B. Beobachtermuster). Entwurfsmuster sind besonders nützlich, wenn es darum geht, sich wiederholende Probleme zu lösen, die Wartbarkeit zu verbessern und die Teamarbeit zu fördern. In E-Commerce-Systemen kann das Beobachtermuster automatische Aktualisierungen zwischen Warenkorb- und Bestellstatus realisieren. Insgesamt sind PHP-Entwurfsmuster ein wichtiges Werkzeug zum Erstellen robuster, skalierbarer und wartbarer Anwendungen.
