Middle
Vai jūsu praksē tiek izmantoti dizaina modeļi?
sobes.tech AI
Atbilde no AI
Jā, es lietoju. Tie palīdz risināt standarta uzdevumus, uzlabot koda struktūru, lasāmību un uzturēšanu.
Galvenie modeļi, kurus es izmantoju:
- Radītāji:
- Singleton: Lai ierobežotu klasi ar vienu eksemplāru.
- Factory Method: Lai izveidotu objektus bez konkrētas klases norādīšanas.
- Abstract Factory: Lai izveidotu saistītu objektu ģimenes.
- Builder: Lai pakāpeniski veidotu sarežģītus objektus.
- Strukturālie:
- Adapter: Lai nodrošinātu saskarnes saderību.
- Decorator: Lai dinamiski pievienotu uzvedību objektam.
- Facade: Lai nodrošinātu vienotu interfeisu apakšsistēmai.
- Proxy: Lai pārvaldītu piekļuvi objektam.
- Uzvedības modeļi:
- Observer: Lai īstenotu abonēšanas un paziņošanas mehānismu.
- Strategy: Lai definētu ģimenes algoritmus un to aizvietojamību.
- Template Method: Lai noteiktu algoritma skeletu bāzes klasē.
- Command: Lai inkapsulētu pieprasījumu kā objektu.
Piemēram, Singleton bieži izmanto darbā ar datu bāzi:
<?php
// Database.php
class Database {
private static ?Database $instance = null;
private ?PDO $pdo = null;
private function __construct() {
// Savienojuma konfigurācija ar DB
$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() {}
}
Un Factory Method es izmantojams dažādu ziņojumu vai objektu veidošanai atkarībā no ievades datiem.
<?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.");
}
}
}
// Lietošana:
// $factory = new MessageFactory();
// $email = $factory->createMessage('email');
// echo $email->send(); // Izvadīs "Sending email..."
Modeļa izvēle ir atkarīga no konkrētās uzdevuma un konteksta. Galvenais – neizmantojiet tos tikai tāpēc, lai izmantotu, bet saprotiet, kad tie patiešām ir nepieciešami, lai uzlabotu kodu.