Sobes.tech
Middle

Amaliyotingizda dizayn shablonlarini ishlatasizmi?

sobes.tech AI

AIdan javob

Ha, foydalanaman. Ular odatiy vazifalarni hal qilishda, kod tuzilishini yaxshilashda, uning o'qilishi va qo'llab-quvvatlanishini oshirishda yordam beradi.

Asosiy shablonlar quyidagilar:

  • Yaratish shablonlari:
    • Singleton: Sinfni bitta nusxaga cheklash uchun.
    • Factory Method: Aniq sinfni ko'rsatmasdan ob'ektlar yaratish uchun.
    • Abstract Factory: Bog'liq bo'lgan ob'ektlar oilalarini yaratish uchun.
    • Builder: Murakkab ob'ektlarni bosqichma-bosqich yaratish uchun.
  • Struktural shablonlar:
    • Adapter: Interfeyslar mosligini ta'minlash uchun.
    • Decorator: Ob'ektga dinamik ravishda xulq-atvor qo'shish uchun.
    • Facade: Subsystemga yagona interfeys taqdim etish uchun.
    • Proxy: Ob'ektga kirishni boshqarish uchun.
  • Xulq-atvor shablonlari:
    • Observer: Obuna va bildirish mexanizmini amalga oshirish uchun.
    • Strategy: Algoritmlar oilasini belgilash va ularni almashtirish uchun.
    • Template Method: Asosiy sinfda algoritm skeletini belgilash uchun.
    • Command: So'rovni ob'ekt sifatida inkapsulyatsiya qilish uchun.

Masalan, men ko'pincha Singletonni ma'lumotlar bazasi bilan ishlash uchun ishlataman:

<?php
// Database.php
class Database {
    private static ?Database $instance = null;
    private ?PDO $pdo = null;

    private function __construct() {
        // Ma'lumotlar bazasi ulanish konfiguratsiyasi
        $dsn = 'mysql:host=localhost;dbname=mydatabase;charset=utf8';
        $user = 'myuser';
        $password = 'mypassword';

        try {
            $this->pdo = new PDO($dsn, $user, $password);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
    }

    public static function getInstance(): self {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function getConnection(): ?PDO {
        return $this->pdo;
    }

    private function __clone() {}
    public function __wakeup() {}
}

Va kirish ma'lumotlariga asoslangan holda turli xil xabarlar yoki ob'ektlar yaratish uchun Factory Method'dan foydalanish mumkin:

<?php
// MessageFactory.php
interface Message {
    public function send(): string;
}

class EmailMessage implements Message {
    public function send(): string {
        return "Email yuborilmoqda...";
    }
}

class SmsMessage implements Message {
    public function send(): string {
        return "SMS yuborilmoqda...";
    }
}

class MessageFactory {
    public function createMessage(string $type): Message {
        switch ($type) {
            case 'email':
                return new EmailMessage();
            case 'sms':
                return new SmsMessage();
            default:
                throw new InvalidArgumentException("Noma'lum xabar turi.");
        }
    }
}

// Foydalanish:
// $factory = new MessageFactory();
// $email = $factory->createMessage('email');
// echo $email->send(); // "Email yuborilmoqda..." chiqaradi

Shablon tanlovi aniq vazifa va kontekstga bog'liq. Muhimi, ularni faqat foydalanish uchun emas, balki ularning haqiqatan ham kerakligini tushunish uchun ishlatish, bu esa kodni yaxshilashga yordam beradi.