Junior — Middle
Tudna példát mondani arra a legbonyolultabb tervezési mintára, amit gyakorlatban alkalmazott?
sobes.tech MI
Válasz az MI-től
Az egyik legbonyolultabb tervezési minta, amellyel PHP-ben dolgoztam, az "Állapot" (State) minta. Ez a minta lehetővé teszi egy objektum számára, hogy belső állapotától függően viselkedését megváltoztassa anélkül, hogy osztályát módosítaná.
Példa: volt egy projekt, amelyben rendelési rendszer volt, ahol a rendelés különböző állapotokban lehetett (új, fizetett, szállított, törölt). Sok feltételes utasítás helyett minden állapotot külön osztályként valósítottam meg, amely egy közös interfészt implementál, és dinamikusan váltogattam a rendelés állapotát.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// logika a "fizetett" állapotba lépéshez
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// logika a "szállított" állapotba lépéshez
$order->setState(new ShippedOrderState());
}
}
class OrderContext {
private $state;
public function __construct(OrderState $state) {
$this->state = $state;
}
public function setState(OrderState $state) {
$this->state = $state;
}
public function proceed() {
$this->state->proceed($this);
}
}
// Használat
$order = new OrderContext(new NewOrderState());
$order->proceed(); // átáll a "fizetett" állapotra
$order->proceed(); // átáll a "szállított" állapotra
Ez a minta összetett, mert jó OOP-elveket és helyes osztálytervezést igényel az állapotok kezeléséhez, de jelentősen javítja a kód olvashatóságát és bővíthetőségét.