Abstract Factory nümunəsi, konkret klasları(classes) göstərmədən, bir-biri ilə əlaqəli və ya asılı olan obyektlər ailəsini yaratmaq üçün bir interfeys təmin edir.
Misal üçün
// Abstrakt Məhsul
class Button {
render() {
throw new Error("Bu metodu override edin!");
}
}
Button klası abstrakt məhsuldur. O, bu klası genişləndirən hər hansı konkret məhsul tərəfindən mütləq yenidən yazılmalı olan render metodunu müəyyən edir.
// Konkret Məhsul
class WindowsButton extends Button {
render() {
console.log("Windows üslubunda düymənin göstərilməsi.");
}
}
class MacOSButton extends Button {
render() {
console.log("MacOS üslubunda düymənin göstərilməsi.");
}
}
WindowsButton və MacOSButton, Button klasını genişləndirən konkret məhsullardır. Onlar render metodunun spesifik realizasiyasını təmin edirlər.
// Abstrakt fabrik
class GUIFactory {
createButton() {
throw new Error("Bu metodu override edin!");
}
}
GUIFactory klası abstrakt fabrikdir. O, bu klası genişləndirən hər hansı konkret fabrik tərəfindən mütləq yenidən yazılmalı olan createButton metodunu müəyyən edir.
// Konkret fabrik
class WindowsFactory extends GUIFactory {
createButton() {
return new WindowsButton();
}
}
class MacOSFactory extends GUIFactory {
createButton() {
return new MacOSButton();
}
}
WindowsFactory və MacOSFactory, GUIFactory klasını genişləndirən konkret fabriklərdir. Onlar createButton metodunun spesifik realizasiyasını təmin edirlər və müvafiq olaraq WindowsButton və MacOSButton instansiyalarını qaytarırlar.
// Klient tərəfin kodu
function createUI(factory) {
const button = factory.createButton();
button.render();
}
createUI funksiyası, fabriki istifadə edərək düymə yaratmaq və render etmək üçün klient kodudur. Bu funksiya fabriki arqument olaraq qəbul edir, fabrikin createButton metodunu çağırır və düyməni alır, sonra isə düymənin render metodunu çağırır.
İstifadəsi
const windowsFactory = new WindowsFactory();
createUI(windowsFactory);
const macFactory = new MacOSFactory();
createUI(macFactory);
Xülasə
Burada, biz WindowsFactory və MacOSFactory instansiyalarını yaradıb, onları createUI funksiyasına ötürürük. Bu, kodun fərqli fabriklərlə işləyərək düymələri müxtəlif üslublarda yaratma və render etmə üsulunu nümayiş etdirir. Abstract Factory nümunəsi klient kodunun yaratması lazım olan obyektlərin konkret klaslardan ayrılmasına imkan verir, bu da çeviklik və genişlənə bilənlik təmin edir.