Middle
Практикаңызда дизайн үлгүлөрүн колдонобузбу?
sobes.tech AI
AIден жооп
Ооба, мен колдонуп жатам. Алар стандарттык тапшырмаларды чечүүгө, коддун түзүлүшүн жакшыртууга, анын окумдуулугун жана колдонуучулугун жогорулатууга жардам берет.
Мен колдонгон негизги үлгүлөр:
- Жасоо:
- Singleton: Класс бир экземпляр менен чектелүү үчүн.
- Factory Method: Объекттерди так эмес класс көрсөтүү менен түзүү үчүн.
- Abstract Factory: Байланыштуу объекттердин үй-бүлөлөрүн түзүү үчүн.
- Builder: Кыйынчылык менен түзүлгөн объекттерди кадам-кадам түзүү үчүн.
- Түзүмдүк:
- Adapter: Интерфейстердин шайкештиги үчүн.
- Decorator: Объектке динамикалуу жүрүм-турумду кошуу үчүн.
- Facade: Жеке системага бирдиктүү интерфейс берүү үчүн.
- Proxy: Объектке кирүүнү башкаруу үчүн.
- Ашыкча:
- Observer: Жазылуу жана кабарлоо механизмин ишке ашыруу үчүн.
- Strategy: Алгоритмдердин үй-бүлөлөрүн аныктоо жана алардын алмаштырылуучулугун камсыздоо үчүн.
- Template Method: Алгоритмдин схемасын негизги класста аныктоо үчүн.
- Command: Суранышты объект катары инкапсуляциялоо үчүн.
Мисал катары, мен көбүнчө Singleton'ду маалымат базасы менен иштөө үчүн колдонуп жатам:
<?php
// Database.php
class Database {
private static ?Database $instance = null;
private ?PDO $pdo = null;
private function __construct() {
// Базадагы туташуу конфигурациясы
$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() {}
}
Мен ошондой эле Factory Method'ду колдонуп, киргизилген маалыматтарга жараша ар кандай түрдөгү билдирүүлөрдү же объекттерди түзө алам:
<?php
// MessageFactory.php
interface Message {
public function send(): string;
}
class EmailMessage implements Message {
public function send(): string {
return "Sending email...";
}
}
class SmsMessage implements Message {
public function send(): string {
return "Sending SMS...";
}
}
class MessageFactory {
public function createMessage(string $type): Message {
switch ($type) {
case 'email':
return new EmailMessage();
case 'sms':
return new SmsMessage();
default:
throw new InvalidArgumentException("Unknown message type.");
}
}
}
// Колдонуу:
// $factory = new MessageFactory();
// $email = $factory->createMessage('email');
// echo $email->send(); // Нәтиже: "Sending email..."
Үлгүнү тандалуу конкрет тапшырмага жана контекстке жараша болот. Алардын кереги жок болсо, колдонбоо маанилүү, анткени алар кодду жакшыртуу үчүн гана керек.