Php-design-patterns

提供:Dev Guides
移動先:案内検索

PHP-デザインパターン

マイクロソフトのデザインパターン理論は、「ドキュメントがパターンを紹介し、問題を解決するパターンの適切な組み合わせを見つけるのに役立つように編成されたリポジトリまたはカタログにそれらを提示します」です。

設計パターンの例

シングルトン

クラスには1つのインスタンスがあり、グローバルアクセスポイントを提供します。次のコードはシングルトンの概念について説明します。

<?php
   class Singleton {
      public static function getInstance() {
         static $instance = null;

         if (null === $instance) {
            $instance = new static();
         }
         return $instance;
      }
      protected function __construct() {
      }

      private function __clone() {
      }

      private function __wakeup() {
      }
   }

   class SingletonChild extends Singleton {
   }

   $obj = Singleton::getInstance();
   var_dump($obj === Singleton::getInstance());

   $anotherObj = SingletonChild::getInstance();
   var_dump($anotherObj === Singleton::getInstance());
   var_dump($anotherObj === SingletonChild::getInstance());
?>

静的メソッドの作成に基づいて実装された上記の例はgetInstance()です

工場

クラスSimpleはオブジェクトを作成し、そのオブジェクトを使用したいと思います。次の例では、ファクトリデザインパターンについて説明します。

<?php
   class Automobile {
      private $bikeMake;
      private $bikeModel;

      public function __construct($make, $model) {
         $this->bikeMake = $make;
         $this->bikeModel = $model;
      }

      public function getMakeAndModel() {
         return $this->bikeMake . ' ' . $this->bikeModel;
      }
   }

   class AutomobileFactory {
      public static function create($make, $model) {
         return new Automobile($make, $model);
      }
   }

   $pulsar = AutomobileFactory::create('ktm', 'Pulsar');
   print_r($pulsar->getMakeAndModel());

   class Automobile {
      private $bikeMake;
      private $bikeModel;

      public function __construct($make, $model) {
         $this->bikeMake = $make;
         $this->bikeModel = $model;
      }

      public function getMakeAndModel() {
         return $this->bikeMake . ' ' . $this->bikeModel;
      }
   }

   class AutomobileFactory {
      public static function create($make, $model) {
         return new Automobile($make, $model);
      }
   }
   t$pulsar = AutomobileFactory::create('ktm', 'pulsar');

   print_r($pulsar->getMakeAndModel());
?>

工場出荷時のパターンの主な難点は、複雑さが増し、優秀なプログラマーにとっては信頼できないことです。

戦略パターン

戦略パターンはファミリーアルゴリズムを作成し、各アルゴリズムをカプセル化します。 ここで、各アルゴリズムはファミリ内で相互に変更可能である必要があります。

<?php
   $elements = array(
      array(
         'id' => 2,
         'date' => '2011-01-01',
      ),
      array(
         'id' => 1,
         'date' => '2011-02-01'
      )
   );

   $collection = new ObjectCollection($elements);

   $collection->setComparator(new IdComparator());
   $collection->sort();

   echo "Sorted by ID:\n";
   print_r($collection->elements);

   $collection->setComparator(new DateComparator());
   $collection->sort();

   echo "Sorted by date:\n";
   print_r($collection->elements);
?>

モデルビューコントロール

ビューはGUIとして機能し、モデルはバックエンドとして機能し、コントロールはアダプターとして機能します。 ここでは、3つの部分が相互に接続されています。 データを渡し、相互にデータにアクセスします。

モデルビューコントロール