現在の位置: ホーム> 最新記事一覧> PHPデザインパターンの概要と練習:8つのクラシックパターンの詳細な説明

PHPデザインパターンの概要と練習:8つのクラシックパターンの詳細な説明

gitbox 2025-07-27

PHP設計パターンの概要と練習

PHPは、サーバー側の開発で広く使用されているスクリプト言語です。その設計パターンは、開発者がコードの読みやすさ、保守性、スケーラビリティを改善するのに役立ちます。 PHP開発では、設計パターンが広く使用されており、一般的な開発問題をある程度解決し、コードの再利用性とモジュール性を高めることができます。この記事では、PHPの8つの古典的なデザインパターンを詳細に調べ、例を通じてそのアプリケーションを示します。

シングルトンモード

シングルトンパターンは、クラスを1回だけインスタンス化するように制限し、グローバルアクセスポイントを提供するために使用される一般的な設計パターンです。オブジェクトを頻繁に作成して破壊する必要があるシナリオのパフォーマンスを効果的に改善できます。リソースの不必要な無駄を避けてください。

シングルトンパターンの例

次のコードは、PHPにシングルトンパターンを実装する方法を示しています。

 class Singleton {
    private static $instance;

    private function __construct() {
        // プライベートコンストラクターは、外部インスタンス化を防ぎます
    }

    public static function getInstance() {
        if (!self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
$object = Singleton::getInstance();

上記のコードでは、$インスタンス変数を使用して一意のインスタンスを保存し、getInstance()メソッドはインスタンスオブジェクトの作成と返却を担当します。インスタンスが作成されていない場合、新しいインスタンスが作成され、$インスタンスに割り当てられます。

工場モデル

ファクトリーパターンは、ファクトリーメソッドを介してオブジェクトを作成するメカニズムを提供するため、クライアントはクラスオブジェクトを直接インスタンス化する必要がなく、したがってオブジェクトの作成と使用プロセスを切り離す必要がありません。

工場モードの例

PHPで工場モードを実装するための例のコードは次のとおりです。

 interface Shape {
    public function draw();
}

class Rectangle implements Shape {
    public function draw() {
        echo "Draw a rectangle. ";
    }
}

class Circle implements Shape {
    public function draw() {
        echo "Draw a circle. ";
    }
}

class ShapeFactory {
    public function getShape($shapeType) {
        if ($shapeType === 'Rectangle') {
            return new Rectangle();
        } elseif ($shapeType === 'Circle') {
            return new Circle();
        }
        return null;
    }
}

$shapeFactory = new ShapeFactory();
$rectangle = $shapeFactory->getShape('Rectangle');
$rectangle->draw(); // 出力 "Draw a rectangle."
$circle = $shapeFactory->getShape('Circle');
$circle->draw(); // 出力 "Draw a circle."

この例では、Shapeインターフェイスはdraw()メソッドを定義し、長方形と円のクラスはこのインターフェイスを実装します。 ShapeFactoryクラスは、合格した形状型に基づいて対応するオブジェクトを作成します。

抽象的な工場パターン

抽象的な工場パターンは、特定のクラスを指定せずにオブジェクトに関連または依存する一連の工場の作成を可能にする工場パターンの拡張です。

ポリシーモード

ポリシーパターンにより、クラスの動作は、アルゴリズムを異なるポリシークラスにカプセル化することにより、実行時に動的に変更でき、クライアントは異なるポリシーを選択してタスクを完了できます。

オブザーバーモード

オブザーバーパターンは、オブジェクト間の1対多くの依存関係を定義する行動設計パターンです。オブジェクトの状態が変更されると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます。

デコレーターモード

デコレーターモードにより、他のオブジェクトの機能に影響を与えることなく、オブジェクトに機能を動的に追加することができます。オブジェクトの機能を拡張する柔軟な方法を提供します。

エージェントモード

プロキシモードは、そのオブジェクトにプロキシ(代理)を提供することにより、他のオブジェクトへのアクセスを制御します。ターゲットオブジェクトを変更せずに、怠zyなロード、許可チェックなどの機能を追加できます。

アダプターモード

アダプターモードは、アダプタークラスを作成することにより、互換性のないインターフェイスを変換するため、直接協力できないクラスが一緒に動作するようにします。

上記で紹介した8つの設計パターンは、PHP開発で広く使用されており、コードの構造とスケーラビリティを大幅に改善できます。これらの設計パターンをマスターすることで、開発者は複雑なプロジェクトにもっと穏やかに対処できるようになります。これらのパターンを継続的に練習すると、より簡潔で柔軟で効率的なコードを書くことができます。