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..."
Նախատիպի ընտրությունը կախված է կոնկրետ խնդիրից և կոնտեքստից: Կարևոր է հասկանալ, որ դրանք օգտագործել միայն այն ժամանակ, երբ իսկապես անհրաժեշտ է՝ կոդը բարելավելու համար: