Example
// Third-party logging library with its own interface
class ThirdPartyLogger {
public function writeLog(string $level, string $msg): void {}
}
// Our interface
interface Logger {
public function log(string $msg): void;
}
// Adapter — bridge between them
class LoggerAdapter implements Logger {
public function __construct(private ThirdPartyLogger $lib) {}
public function log(string $msg): void {
$this->lib->writeLog('info', $msg);
}
}
Classic uses
- Integrating third-party libraries under your own interface
- Migrating to a new API version without changing client code
- Testing: a MockAdapter instead of the real service