Skip to content

Commit

Permalink
Builder design pattern code
Browse files Browse the repository at this point in the history
  • Loading branch information
ozlematayy committed Dec 21, 2023
1 parent 081f8e4 commit 0ffa90b
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 0 deletions.
10 changes: 10 additions & 0 deletions DesignPatterns/Builder/Builder.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>
104 changes: 104 additions & 0 deletions DesignPatterns/Builder/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#region Product Class
public class Log
{
public string Message { get; set; }
public string LogLevel { get; set; }

public override string ToString()
{
return $"{LogLevel}: {Message}";
}
}
#endregion

#region Builder Interface
public interface ILogBuilder
{
void SetMessage(string message);
void SetLogLevel(string logLevel);
Log GetLog();
}
#endregion

#region Concrete Builder
public class FileLogBuilder : ILogBuilder
{
private Log _log = new Log();

public void SetMessage(string message)
{
_log.Message = message;
}

public void SetLogLevel(string logLevel)
{
_log.LogLevel = logLevel;
}

public Log GetLog()
{
Console.WriteLine("File logging is performed!");
return _log;
}
}

public class EmailLogBuilder : ILogBuilder
{
private Log _log = new Log();

public void SetMessage(string message)
{
_log.Message = message;
}

public void SetLogLevel(string logLevel)
{
_log.LogLevel = logLevel;
}

public Log GetLog()
{
Console.WriteLine("Email logging is performed!");
return _log;
}
}
#endregion

#region Director Class
public class LogManager
{
private readonly ILogBuilder _logBuilder;

public LogManager(ILogBuilder logBuilder)
{
_logBuilder = logBuilder;
}

public Log BuildLog(string message, string logLevel)
{
_logBuilder.SetMessage(message);
_logBuilder.SetLogLevel(logLevel);
return _logBuilder.GetLog();
}
}
#endregion

#region Running the code
class Program
{
static void Main(string[] args)
{
var fileLogBuilder = new FileLogBuilder();
var fileLogManager = new LogManager(fileLogBuilder);

var fileLog = fileLogManager.BuildLog("Error occurred!", "ERROR");
Console.WriteLine(fileLog);

var emailLogBuilder = new EmailLogBuilder();
var emailLogManager = new LogManager(emailLogBuilder);

var emailLog = emailLogManager.BuildLog("Critical error!", "CRITICAL");
Console.WriteLine(emailLog);
}
}
#endregion
6 changes: 6 additions & 0 deletions DesignPatterns/DesignPatterns.sln
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Singleton", "Singleton\Sing
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prototype", "Prototype\Prototype.csproj", "{13DBED8B-2791-4C7E-ACBC-8AE229128A58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder", "Builder\Builder.csproj", "{D75423E8-FA00-4720-98A3-8918391D34D3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -33,6 +35,10 @@ Global
{13DBED8B-2791-4C7E-ACBC-8AE229128A58}.Debug|Any CPU.Build.0 = Debug|Any CPU
{13DBED8B-2791-4C7E-ACBC-8AE229128A58}.Release|Any CPU.ActiveCfg = Release|Any CPU
{13DBED8B-2791-4C7E-ACBC-8AE229128A58}.Release|Any CPU.Build.0 = Release|Any CPU
{D75423E8-FA00-4720-98A3-8918391D34D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D75423E8-FA00-4720-98A3-8918391D34D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D75423E8-FA00-4720-98A3-8918391D34D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D75423E8-FA00-4720-98A3-8918391D34D3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down

0 comments on commit 0ffa90b

Please sign in to comment.