Wyjątki a wzorce projektowe
Założenie: Pokażemy, jak obsługa wyjątków może być ulepszona za pomocą wzorców projektowych Strategy i Decorator.
Krok po kroku:
- Implementacja wzorca Strategy dla różnych strategii obsługi wyjątków:
- Użycie wzorca Decorator do dodania dodatkowej funkcjonalności do obsługi wyjątków:
getMessage());
}
}
class EmailExceptionHandler implements ExceptionHandler {
public function handle(Exception $e) {
// wysyłanie emaila z informacją o błędzie
}
}
class Context {
private ExceptionHandler $handler;
public function __construct(ExceptionHandler $handler) {
$this->handler = $handler;
}
public function execute() {
try {
// jakiś kod, który może rzucić wyjątek
throw new Exception("Błąd!");
} catch (Exception $e) {
$this->handler->handle($e);
}
}
}
$logHandler = new LogExceptionHandler();
$context = new Context($logHandler);
$context->execute();
$emailHandler = new EmailExceptionHandler();
$context = new Context($emailHandler);
$context->execute();
?>
Ten kod definiuje interfejs ExceptionHandler
i dwie jego implementacje: LogExceptionHandler
i EmailExceptionHandler
. Klasa Context
używa strategii do obsługi wyjątków.
handler = $handler;
}
abstract public function handle(Exception $e);
}
class LoggingDecorator extends ExceptionHandlerDecorator {
public function handle(Exception $e) {
error_log("Dodatkowe logowanie: " . $e->getMessage());
$this->handler->handle($e);
}
}
$logHandler = new LogExceptionHandler();
$decoratedHandler = new LoggingDecorator($logHandler);
$context = new Context($decoratedHandler);
$context->execute();
?>
W tym przykładzie LoggingDecorator
dodaje dodatkowe logowanie do istniejącej strategii obsługi wyjątków.
Ten przykład pokazuje, jak wzorce projektowe Strategy i Decorator mogą pomóc w tworzeniu elastycznego i rozszerzalnego systemu obsługi wyjątków w PHP.
Zachęcamy do dalszego zgłębiania tematu obsługi wyjątków i wzorców projektowych w PHP!