Middle+
Uveďte příklady použití vzoru abstraktní továrny.
sobes.tech AI
Odpověď od AI
Vzor abstraktní továrny je užitečný, když je třeba vytvořit rodinu souvisejících nebo závislých objektů bez specifikace jejich konkrétních tříd. Příklady z praxe:
-
Vytváření prvků uživatelského rozhraní (GUI) pro různé operační systémy:
- Abstraktní továrna (
IGUIFactory) může mít metody pro vytváření tlačítek (CreateButton), textových polí (CreateTextBox) a dalších prvků. - Konkrétní továrny (
WindowsFactory,MacOSFactory) implementujíIGUIFactorya vytvářejí platformově specifické prvky. - Klientský kód pracuje pouze s rozhraními (
IButton,ITextBox), aniž by znal konkrétní implementaci.
// Abstraktní produkty public interface IButton { void Render(); } public interface ITextBox { void ShowText(); } // Konkrétní produkty pro Windows public class WindowsButton : IButton { public void Render() { /* Logika vykreslení Windows tlačítka */ } } public class WindowsTextBox : ITextBox { public void ShowText() { /* Logika zobrazení textu ve Windows textovém poli */ } } // Konkrétní produkty pro MacOS public class MacOSButton : IButton { public void Render() { /* Logika vykreslení MacOS tlačítka */ } } public class MacOSTextBox : ITextBox { public void ShowText() { /* Logika zobrazení textu v MacOS textovém poli */ } } // Abstraktní továrna public interface IGUIFactory { IButton CreateButton(); ITextBox CreateTextBox(); } // Konkrétní továrna pro Windows public class WindowsFactory : IGUIFactory { public IButton CreateButton() { return new WindowsButton(); } public ITextBox CreateTextBox() { return new WindowsTextBox(); } } // Konkrétní továrna pro MacOS public class MacOSFactory : IGUIFactory { public IButton CreateButton() { return new MacOSButton(); } public ITextBox CreateTextBox() { return new MacOSTextBox(); } } // Klientský kó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(); } } // Použití // var factory = new WindowsFactory(); // Nebo new MacOSFactory(); // var app = new Application(factory); // app.Paint(); - Abstraktní továrna (
-
Vytváření objektů pro přístup k datům (DAO) pro různé typy databází:
- Abstraktní továrna (
IDatabaseFactory) může mít metody pro vytváření DAO pro uživatele (CreateUserDAO), produkty (CreateProductDAO) atd. - Konkrétní továrny (
SqlDatabaseFactory,OracleDatabaseFactory) implementujíIDatabaseFactorya vytvářejí DAO specifické pro danou databázi. - To umožňuje snadno změnit typ databáze bez změny obchodní logiky.
// Abstraktní DAO public interface IUserDAO { void InsertUser(string username); } public interface IProductDAO { void AddProduct(string productName); } // Konkrétní DAO pro SQL public class SqlUserDAO : IUserDAO { public void InsertUser(string username) { /* SQL INSERT logika */ } } public class SqlProductDAO : IProductDAO { public void AddProduct(string productName) { /* SQL INSERT logika */ } } // Konkrétní DAO pro Oracle public class OracleUserDAO : IUserDAO { public void InsertUser(string username) { /* Oracle INSERT logika */ } } public class OracleProductDAO : IProductDAO { public void AddProduct(string productName) { /* Oracle INSERT logika */ } } // Abstraktní továrna public interface IDatabaseFactory { IUserDAO CreateUserDAO(); IProductDAO CreateProductDAO(); } // Konkrétní továrna pro SQL public class SqlDatabaseFactory : IDatabaseFactory { public IUserDAO CreateUserDAO() { return new SqlUserDAO(); } public IProductDAO CreateProductDAO() { return new SqlProductDAO(); } } // Konkrétní továrna pro Oracle public class OracleDatabaseFactory : IDatabaseFactory { public IUserDAO CreateUserDAO() { return new OracleUserDAO(); } public IProductDAO CreateProductDAO() { return new OracleProductDAO(); } } // Příklad použití v obchodní logice 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); } } - Abstraktní továrna (
-
Vytváření objektů pro práci s různými formáty souborů (např. XML, JSON):
- Abstraktní továrna může vytvářet parsery (
CreateParser) a serializéry (CreateSerializer) pro různé formáty. - Konkrétní továrny (
XmlFactory,JsonFactory) poskytnou implementace specifické pro XML a JSON.
- Abstraktní továrna může vytvářet parsery (
Tyto příklady ukazují, jak abstraktní továrna umožňuje vytvářet rodiny vzájemně propojených objektů, odděluje klientský kód od jejich konkrétních implementací a usnadňuje přidávání nových rodin.