Abstrakt fabrik (Abstract Factory Pattern)
-
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ı olanrender
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. Onlarrender
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ı olancreateButton
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. OnlarcreateButton
metodunun spesifik realizasiyasını təmin edirlər və müvafiq olaraqWindowsButton
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, fabrikincreateButton
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.