Senior
Porovnejte návrhové vzory, které jste používali v jiných programovacích jazycích, s těmi, které se používají v TypeScriptu.
sobes.tech AI
Odpověď od AI
Vývoj frontend na TypeScriptu často vychází z klasických vzorů návrhu a přizpůsobuje je specifikům JavaScriptu a statické typizaci. Rozdíly jsou především způsobeny dynamikou JS a možnostmi TS.
Hlavní vzory, které se často v TypeScriptu vyskytují:
- Singleton: Implementuje se přes statickou vlastnost nebo funkci, která vrací jediný instance třídy. Na rozdíl od jazyků s přísnější kontrolou přístupu je v JS/TS spíše dohoda.
- Factory Method / Abstract Factory: Používají se k vytváření objektů. V TS lze použít rozhraní k definování smluv továren a tříd, což zvyšuje bezpečnost typů ve srovnání s čistým JS.
- Observer: Často se používá pro odběry a oznámení, například v reaktivních knihovnách nebo při práci s událostmi. Typování odběratelů a dat událostí zvyšuje spolehlivost.
- Strategy: Umožňuje inkapsulaci různých algoritmů a jejich výběr při běhu. TypeScript pomáhá zajistit, že všechny strategie implementují stejnou rozhraní.
Porovnání s jinými jazyky (C# / Java jako příklad):
| Vzor | TypeScript (Specifika) | Jiné jazyky (C# / Java) (Specifika) |
|---|---|---|
| Singleton | Závisí na dohodě, nemá přísné modifikátory přístupu. | Často se realizuje pomocí private konstruktoru a statické metody. |
| Factory | Použití rozhraní pro smlouvy. | Silná kontrola typů, abstract třídy. |
| Observer | Široce používané v reaktivním programování. | Často s použitím tříd, event / posluchačů. |
| Strategy | Použití rozhraní pro definici chování. | Realizace přes rozhraní nebo abstraktní třídy. |
| Decorator | Nativní podpora přes syntaxi @. |
Realizace přes dědičnost nebo obalování. |
| Adapter | Dostupnost vyšších funkcí usnadňuje implementaci. | Obvykle realizováno přes dědičnost nebo kompozici. |
Rozdíly:
- Dynamická povaha JS: Některé vzory, spojené s introspekcí nebo dynamickým vytvářením objektů, mohou být jednodušší v čistém JS, ale TypeScript přidává úroveň bezpečnosti.
- Typování: Nejvýznamnější rozdíl. TypeScript umožňuje používat rozhraní, generika a statickou analýzu pro realizaci vzorů s větší spolehlivostí. Například vzor Decorator má nativní podporu v TypeScriptu.
- Asynchronní operace: Vzory spojené s asynchronností (například Promises, async/await) jsou v frontendovém vývoji důležitější a TypeScript je dobře podporuje.
Příklad implementace Singleton v TypeScriptu:
class Singleton {
private static instance: Singleton;
private constructor() {
// Inicializace
}
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
// Metody třídy
}
Obecně platí, že vzory v TypeScriptu odrážejí klasické principy, ale jsou přizpůsobeny ekosystému JavaScriptu, aktivně využívají možnosti statické typové kontroly ke zlepšení kódu a prevenci chyb.