Middle+
Adjon példákat az absztrakt gyár mintájának használatára.
sobes.tech MI
Válasz az MI-től
Az absztrakt gyár minta akkor hasznos, amikor egy kapcsolódó vagy függő objektumcsaládot kell létrehozni anélkül, hogy azok konkrét osztályait meg kellene határozni. A való élet példái:
-
Felhasználói felület (GUI) elemek létrehozása különböző operációs rendszerekhez:
- Az absztrakt gyár (
IGUIFactory) tartalmazhat metódusokat gombok (CreateButton), szövegmezők (CreateTextBox) és más elemek létrehozására. - Konkrét gyárak (
WindowsFactory,MacOSFactory) implementálják azIGUIFactory-t, és platform-specifikus elemeket hoznak létre. - A klienskód csak az interfészekkel (
IButton,ITextBox) dolgozik, nem tudva a konkrét implementációkról.
// Absztrakt termékek public interface IButton { void Render(); } public interface ITextBox { void ShowText(); } // Konkrét termékek Windows-hoz public class WindowsButton : IButton { public void Render() { /* Windows gomb renderelési logika */ } } public class WindowsTextBox : ITextBox { public void ShowText() { /* Windows szövegmező megjelenítési logika */ } } // Konkrét termékek MacOS-hez public class MacOSButton : IButton { public void Render() { /* MacOS gomb renderelési logika */ } } public class MacOSTextBox : ITextBox { public void ShowText() { /* MacOS szövegmező megjelenítési logika */ } } // Absztrakt gyár public interface IGUIFactory { IButton CreateButton(); ITextBox CreateTextBox(); } // Konkrét gyár Windows-hoz public class WindowsFactory : IGUIFactory { public IButton CreateButton() { return new WindowsButton(); } public ITextBox CreateTextBox() { return new WindowsTextBox(); } } // Konkrét gyár MacOS-hez public class MacOSFactory : IGUIFactory { public IButton CreateButton() { return new MacOSButton(); } public ITextBox CreateTextBox() { return new MacOSTextBox(); } } // Klienskód public class Application { private readonly IGUIFactory _factory; private IButton _button; private ITextBox _textBox; public Application(IGUIFactory factory) { _factory = factory; _button = _factory.CreateButton(); _textBox = _factory.CreateTextBox(); } public void Paint() { _button.Render(); _textBox.ShowText(); } } // Használat // var factory = new WindowsFactory(); // Vagy new MacOSFactory(); // var app = new Application(factory); // app.Paint(); - Az absztrakt gyár (
-
Adat-hozzáférési objektumok (DAO) létrehozása különböző adatbázistípusokhoz:
- Az absztrakt gyár (
IDatabaseFactory) tartalmazhat metódusokat DAO-k létrehozására felhasználók (CreateUserDAO), termékek (CreateProductDAO) stb. számára. - Konkrét gyárak (
SqlDatabaseFactory,OracleDatabaseFactory) implementálják azIDatabaseFactory-t, és platform-specifikus DAO-kat hoznak létre. - Ez megkönnyíti az adatbázis típusának cseréjét anélkül, hogy a üzleti logikát módosítani kellene.
// Absztrakt DAO-k public interface IUserDAO { void InsertUser(string username); } public interface IProductDAO { void AddProduct(string productName); } // Konkrét DAO-k SQL-hez public class SqlUserDAO : IUserDAO { public void InsertUser(string username) { /* SQL beszúrási logika */ } } public class SqlProductDAO : IProductDAO { public void AddProduct(string productName) { /* SQL beszúrási logika */ } } // Konkrét DAO-k Oracle-hez public class OracleUserDAO : IUserDAO { public void InsertUser(string username) { /* Oracle beszúrási logika */ } } public class OracleProductDAO : IProductDAO { public void AddProduct(string productName) { /* Oracle beszúrási logika */ } } // Absztrakt gyár public interface IDatabaseFactory { IUserDAO CreateUserDAO(); IProductDAO CreateProductDAO(); } // Konkrét gyár SQL-hez public class SqlDatabaseFactory : IDatabaseFactory { public IUserDAO CreateUserDAO() { return new SqlUserDAO(); } public IProductDAO CreateProductDAO() { return new SqlProductDAO(); } } // Konkrét gyár Oracle-hez public class OracleDatabaseFactory : IDatabaseFactory { public IUserDAO CreateUserDAO() { return new OracleUserDAO(); } public IProductDAO CreateProductDAO() { return new OracleProductDAO(); } } // Példa a üzleti logikában public class BusinessLogic { private readonly IDatabaseFactory _factory; public BusinessLogic(IDatabaseFactory factory) { _factory = factory; } public void RegisterUser(string username) { var userDAO = _factory.CreateUserDAO(); userDAO.InsertUser(username); } } - Az absztrakt gyár (
-
Objektumok létrehozása különböző fájlformátumokhoz (pl. XML, JSON):
- Az absztrakt gyár parser-eket (
CreateParser) és serializer-eket (CreateSerializer) hoz létre különböző formátumokhoz. - Konkrét gyárak (
XmlFactory,JsonFactory) biztosítják a platform-specifikus implementációkat, XML és JSON esetében.
- Az absztrakt gyár parser-eket (
Ezek a példák bemutatják, hogyan lehet az absztrakt gyár segítségével családokat létrehozni, elválasztva a klienskódot a konkrét implementációktól, és megkönnyítve az új családok hozzáadását.