ホームページ > バックエンド開発 > PHPチュートリアル > すべてのソフトウェア エンジニアが知っておくべき主要な設計パターン

すべてのソフトウェア エンジニアが知っておくべき主要な設計パターン

Barbara Streisand
リリース: 2024-12-30 04:59:09
オリジナル
724 人が閲覧しました

Top esign Patterns Every Software Engineer Should Know

PHP、特に PHP の属性、列挙型、読み取り専用プロパティなどの最新の機能を備えた PHP は、デザイン パターンの実装に適しています。ここでは、ソフトウェア エンジニアが知っておくべき 5 つの重要なパターンを紹介します。


1. シングルトンパターン

クラスのインスタンスが 1 つだけであることを保証します。

final class Config 
{
    private static ?Config $instance = null;

    private function __construct(public readonly array $settings) {}

    public static function getInstance(): Config 
    {
        return self::$instance ??= new Config(['env' => 'production']);
    }
}

// Usage
$config = Config::getInstance();
echo $config->settings['env']; // Output: production
ログイン後にコピー

2. ファクトリーパターン

オブジェクト作成ロジックを一元化します。

class DatabaseFactory 
{
    public static function create(string $type): Database 
    {
        return match ($type) {
            'mysql' => new MySQLDatabase(),
            'postgres' => new PostgresDatabase(),
            default => throw new InvalidArgumentException("Unknown database type"),
        };
    }
}

interface Database { public function connect(): void; }
class MySQLDatabase implements Database { public function connect() { echo "MySQL connected"; } }
class PostgresDatabase implements Database { public function connect() { echo "Postgres connected"; } }

// Usage
$db = DatabaseFactory::create('mysql');
$db->connect(); // Output: MySQL connected
ログイン後にコピー

3. オブザーバーパターン

状態の変化について複数のオブジェクトに通知します。

class Event 
{
    private array $listeners = [];

    public function attach(callable $listener): void { $this->listeners[] = $listener; }
    public function trigger(string $data): void { foreach ($this->listeners as $listener) $listener($data); }
}

// Usage
$event = new Event();
$event->attach(fn($data) => print "Listener 1: $data\n");
$event->attach(fn($data) => print "Listener 2: $data\n");

$event->trigger("Event triggered"); 
// Output:
// Listener 1: Event triggered
// Listener 2: Event triggered
ログイン後にコピー

4. デコレータパターン

オブジェクトに動作を動的に追加します。

interface Text { public function render(): string; }

class PlainText implements Text 
{
    public function __construct(private string $text) {}
    public function render(): string { return $this->text; }
}

class BoldText implements Text 
{
    public function __construct(private Text $text) {}
    public function render(): string { return "<b>" . $this->text->render() . "</b>"; }
}

// Usage
$text = new BoldText(new PlainText("Hello, World!"));
echo $text->render(); // Output: <b>Hello, World!</b>
ログイン後にコピー

5. 戦略パターン

実行時にアルゴリズムを切り替えます。

interface PaymentStrategy { public function pay(float $amount): void; }

class CreditCardPayment implements PaymentStrategy 
{
    public function pay(float $amount): void { echo "Paid $amount with Credit Card\n"; }
}

class PayPalPayment implements PaymentStrategy 
{
    public function pay(float $amount): void { echo "Paid $amount via PayPal\n"; }
}

class PaymentProcessor 
{
    public function __construct(private PaymentStrategy $strategy) {}

    public function execute(float $amount): void 
    {
        $this->strategy->pay($amount);
    }
}

// Usage
$processor = new PaymentProcessor(new PayPalPayment());
$processor->execute(100.00); // Output: Paid 100 via PayPal
ログイン後にコピー

これらのパターンは現実世界の問題を解決し、保守可能でスケーラブルなアプリケーションを作成するための基礎となります。

あなたの現在のプロジェクトと共鳴するパターンはどれですか?コメントで議論しましょう! ?

以上がすべてのソフトウェア エンジニアが知っておくべき主要な設計パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート