Sobes.tech
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..."

Նախատիպի ընտրությունը կախված է կոնկրետ խնդիրից և կոնտեքստից: Կարևոր է հասկանալ, որ դրանք օգտագործել միայն այն ժամանակ, երբ իսկապես անհրաժեշտ է՝ կոդը բարելավելու համար: