Design Patterns

Abstract Factory Design Pattern

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

In below example i have used two different types of Logging can be stored – Error Logger and Info Logger. I have used abstract factory pattern to abstract away object creation details from client

Create ExceptionAbstractFactory.cs class file and add below code.

using System;
namespace dotnetfundamentals.AbstractFactory
{
//Common interface for concrete classes
public interface ILogger
{
void Log();
}
public class Error : ILogger
{
public void Log()
{
Console.Write("Error Logger");
}
}
public class Info : ILogger
{
public void Log()
{
Console.Write("Info Logger");
}
}
//Abstract factory and factory code snippet
public abstract class AbstractFactory
{
static public ILogger WriteLog(LogType logType)
{
if (logType == LogType.Error)
{
return ErrorFactory.Error();
}
else if (logType == LogType.Info)
{
return InfoFactory.Info();
}
return null;
}
}
public class ErrorFactory : AbstractFactory
{
static public ILogger Error()
{
return new Error();
}
}
public class InfoFactory : AbstractFactory
{
static public ILogger Info()
{
return new Info();
}
}
public enum LogType
{
Error,
Info
}
}

Add below code in Program.cs file.

using System;
namespace dotnetfundamentals.AbstractFactory
{
class Program
{
static void Main(string[] args)
{
ILogger iLogger;
iLogger = AbstractFactory.WriteLog(LogType.Error);
iLogger.Log();
}
}
}

Leave a comment