Design Patterns
Example 2: Adapter for Third-Party Library Integration
Scenario

Your application uses a logging interface, but you want to integrate a third-party logging library with a different interface.


using System;

namespace AdapterPatternExample
{
    // Target Interface
    public interface ILogger
    {
        void Log(string message);
    }

    // Adaptee (Third-Party Logger)
    public class ThirdPartyLogger
    {
        public void WriteLog(string logMessage)
        {
            Console.WriteLine($"ThirdPartyLogger: {logMessage}");
        }
    }

    // Adapter
    public class LoggerAdapter : ILogger
    {
        private readonly ThirdPartyLogger _thirdPartyLogger;

        public LoggerAdapter(ThirdPartyLogger thirdPartyLogger)
        {
            _thirdPartyLogger = thirdPartyLogger;
        }

        public void Log(string message)
        {
            _thirdPartyLogger.WriteLog(message);
        }
    }

    // Client
    class Program
    {
        static void Main(string[] args)
        {
            ThirdPartyLogger thirdPartyLogger = new ThirdPartyLogger();
            ILogger logger = new LoggerAdapter(thirdPartyLogger);
            logger.Log("This is a log message.");
        }
    }
}