From 4fd3dff5ec10bb540ecb4a45027967052c95b93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zlem?= <77455910+ozlematayy@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:44:49 +0300 Subject: [PATCH] Factory Method design pattern code --- DesignPatterns/DesignPatterns.sln | 6 ++ .../FactoryMethod/FactoryMethod.csproj | 10 +++ DesignPatterns/FactoryMethod/Program.cs | 75 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 DesignPatterns/FactoryMethod/FactoryMethod.csproj create mode 100644 DesignPatterns/FactoryMethod/Program.cs diff --git a/DesignPatterns/DesignPatterns.sln b/DesignPatterns/DesignPatterns.sln index 39bb7e5..1938395 100644 --- a/DesignPatterns/DesignPatterns.sln +++ b/DesignPatterns/DesignPatterns.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.6.33829.357 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AbstractFactory", "AbstractFactory\AbstractFactory.csproj", "{7D587025-5DCC-40B0-A93E-7A6E63F4C131}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FactoryMethod", "FactoryMethod\FactoryMethod.csproj", "{B0D97A44-B546-49B6-A3A8-705D7B6A33D0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {7D587025-5DCC-40B0-A93E-7A6E63F4C131}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D587025-5DCC-40B0-A93E-7A6E63F4C131}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D587025-5DCC-40B0-A93E-7A6E63F4C131}.Release|Any CPU.Build.0 = Release|Any CPU + {B0D97A44-B546-49B6-A3A8-705D7B6A33D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0D97A44-B546-49B6-A3A8-705D7B6A33D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0D97A44-B546-49B6-A3A8-705D7B6A33D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0D97A44-B546-49B6-A3A8-705D7B6A33D0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/DesignPatterns/FactoryMethod/FactoryMethod.csproj b/DesignPatterns/FactoryMethod/FactoryMethod.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/DesignPatterns/FactoryMethod/FactoryMethod.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/DesignPatterns/FactoryMethod/Program.cs b/DesignPatterns/FactoryMethod/Program.cs new file mode 100644 index 0000000..743e1b9 --- /dev/null +++ b/DesignPatterns/FactoryMethod/Program.cs @@ -0,0 +1,75 @@ +#region Product +public interface ILogger +{ + void Log(string message); +} + +#endregion +#region Concrete Product +public class ConsoleLogger : ILogger +{ + public void Log(string message) + { + Console.WriteLine($"Console Logger: {message}"); + } +} + +public class DatabaseLogger : ILogger +{ + public void Log(string message) + { + Console.WriteLine($"Database Logger: {message}"); + } +} +#endregion +#region Concrete Creator +public class LoggerFactory +{ + public ILogger GetLogger(string loggerType) + { + if (loggerType.Equals("Console")) + { + return new ConsoleLogger(); + } + else if (loggerType.Equals("Database")) + { + return new DatabaseLogger(); + } + else + { + throw new ArgumentException("Invalid logger type!"); + } + } +} +#endregion +#region Client +public class LoggingClient +{ + private readonly LoggerFactory loggerFactory; + + public LoggingClient(LoggerFactory factory) + { + loggerFactory = factory; + } + + public void LogMessage(string message, string loggerType) + { + ILogger logger = loggerFactory.GetLogger(loggerType); + logger.Log(message); + } +} +#endregion +#region Running the code. +class Program +{ + static void Main(string[] args) + { + LoggerFactory loggerFactory = new LoggerFactory(); + LoggingClient loggingClient = new LoggingClient(loggerFactory); + + loggingClient.LogMessage("This message will be logged in a console.", "Console"); + loggingClient.LogMessage("This message will be logged in a database.", "Database"); + //loggingClient.LogMessage("This message will be logged in a database.", "Email"); + } +} +#endregion