Junior — Middle
Практикада колдонгон эң кыйын дизайн үлгүсүнүн мисалын келтире аласызбы?
sobes.tech AI
AIден жооп
PHPдө иштегенде эң татаал дизайн үлгүлөрүнүн бири — "Кийим" (State) үлгүсү. Бул үлгү объектке ички абалына жараша өзүнүн жүрүм-турумун өзгөртүүгө мүмкүндүк берет, анын класын өзгөртпөстөн.
Мисал катары: менде заказдар системасы бар долбоор болгон, анда заказ ар кандай абалда болушу мүмкүн (жаңы, төлөнгөн, жөнөтүлгөн, жокко чыгарылган). Көптөгөн шарт операторлорунун ордуна, ар бир абалды жалпы интерфейсин ишке ашырат отдельный класс катары ишке ашырдым жана заказдын абалын динамикалуу өзгөрттүм.
interface OrderState {
public function proceed(OrderContext $order);
}
class NewOrderState implements OrderState {
public function proceed(OrderContext $order) {
// "төлөнгөн" абалга өтүү логикасы
$order->setState(new PaidOrderState());
}
}
class PaidOrderState implements OrderState {
public function proceed(OrderContext $order) {
// "жөнөтүлгөн" абалга өтүү логикасы
$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);
}
}
// Колдонуу
$order = new OrderContext(new NewOrderState());
$order->proceed(); // "төлөнгөн" абалга өтөт
$order->proceed(); // "жөнөтүлгөн" абалга өтөт
Бул үлгү татаал, анткени ал ООП принциптерин жакшы түшүнүүнү жана абалдарды башкаруу үчүн туура класстарды долбоорлоону талап кылат, бирок ал коддун окумдуулугун жана кеңейтилинүүсүн кыйла жакшыртат.