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.