Logowanie z użyciem adapterów (np. integracja z różnymi systemami logowania)
Założenie: Zbudujemy prosty system logowania, który będzie mógł korzystać z różnych metod uwierzytelniania (np. logowanie lokalne, logowanie przez Google, Facebook) za pomocą wzorca adaptera.
Krok po kroku:
- Definicja interfejsu logowania: Stworzymy interfejs, który zdefiniuje metody wymagane przez wszystkie adaptery.
- Adapter dla logowania lokalnego: Utworzymy adapter dla logowania do lokalnej bazy danych.
- Adapter dla logowania przez Google (przykład): Utworzymy adapter dla logowania przez Google (implementacja wymagałaby zewnętrznej biblioteki do integracji z API Google).
- Klasa główna do logowania: Klasa ta będzie korzystać z adapterów.
interface LoginAdapter {
public function login(string $username, string $password): bool;
}
Ten interfejs wymusza implementację metody login()
przez każdy adapter.
class LocalLoginAdapter implements LoginAdapter {
public function login(string $username, string $password): bool {
// Tutaj umieść logikę logowania do lokalnej bazy danych
// ... sprawdzenie w bazie danych ...
return true; // Zwróć true, jeśli logowanie się powiodło, false w przeciwnym wypadku
}
}
Ten adapter implementuje interfejs LoginAdapter
i zawiera logikę logowania do lokalnej bazy danych. Pamiętaj o zastąpieniu komentarza “// Tutaj umieść logikę logowania do lokalnej bazy danych” faktycznym kodem dostępu do bazy.
class GoogleLoginAdapter implements LoginAdapter {
public function login(string $username, string $password): bool {
// Tutaj umieść logikę logowania przez Google API
// ... użycie biblioteki Google API ...
return true; // Zwróć true, jeśli logowanie się powiodło, false w przeciwnym wypadku
}
}
Podobnie jak poprzednio, ten adapter implementuje interfejs i zawiera logikę logowania przez Google. W rzeczywistości wymagałby on użycia zewnętrznej biblioteki do interakcji z API Google.
class Login {
private LoginAdapter $adapter;
public function __construct(LoginAdapter $adapter) {
$this->adapter = $adapter;
}
public function authenticate(string $username, string $password): bool {
return $this->adapter->login($username, $password);
}
}
Klasa Login
przyjmuje adapter w konstruktorze i używa go do uwierzytelniania.
Ten przykład pokazuje podstawy wzorca adaptera w kontekście logowania. Można rozszerzyć ten system o wiele więcej adapterów dla różnych metod uwierzytelniania.