- Published on
 
Adapter design pattern
- Authors
 - Name
 - Soulaimane Yahya
 - @soulaimaneyh
 

In this article, we’ll take a deep dive into Adapter design pattern, exploring its key features and providing practical expls of how to use it.
Table Of Contents 
- Adapter design pattern
 
Adapter design pattern 
The Adapter is a structural design pattern that allows incompatible interfaces to work together. It acts as a bridge between two objects by converting the interface of one class into an interface expected by the client.
Expl: Logging Adapter 
php
<?php
class LegacyFileLogger
{
    public function saveLogToFile(string $message): void
    {
        echo "Log saved to file: $message\n";
    }
}php
<?php
interface LoggerInterface
{
    public function log(string $message): void;
}php
<?php
use App\Legacy\LegacyFileLogger;
use App\Contracts\LoggerInterface;
class FileLoggerAdapter implements LoggerInterface
{
    private LegacyFileLogger $legacyLogger;
    public function __construct(LegacyFileLogger $legacyLogger)
    {
        $this->legacyLogger = $legacyLogger;
    }
    public function log(string $message): void
    {
        $this->legacyLogger->saveLogToFile($message);
    }
}php
<?php
use App\Legacy\LegacyFileLogger;
use App\Contracts\LoggerInterface;
use App\Adapters\FileLoggerAdapter;
class LoggerServiceProvider
{
    public function register()
    {
        $this->app->bind(LoggerInterface::class, function ($app) {
            $legacyLogger = new LegacyFileLogger();
            return new FileLoggerAdapter($legacyLogger);
        });
    }
}php
<?php
class LogController
{
    private LoggerInterface $logger;
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }
    public function logAction()
    {
        // Logging an action using the adapted logger
        $this->logger->log('An important action has been executed.');
    }
}Key features: 
- Integrates legacy systems: Use old code without rewriting it.
 - Flexibility: You can switch to another logging system (e.g., cloud logs) by creating a new adapter.
 - Maintainability: Decouples your application from specific implementations, following the Dependency Inversion Principle.