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

Интихоби намуна вобаста ба вазифа ва контекст мебошад. Муҳим он аст, ки онҳоро танҳо барои истифода накунед, балки фаҳмед, ки кай онҳо воқеан барои беҳтар кардани коди заруранд.