PHPでよく使われる3つの設計パターンのまとめ

6945 ワード

この文章はPHPでよく使われる3つのデザインモデルを学ぶノートとまとめで、どの言語で何を開発しても、ほとんどデザインモデルに使われていますが、私たちはなぜデザインモデルが必要なのでしょうか.その誕生は私たちの開発者にとってどのような役割と意義を持っていますか?
iOSの開発をしている人はデザインモデルにも詳しいと信じていますよね?例えば、単例設計モード、工場設計モード、オブザーバーモード、MVCフレーム構造設計モードなどである.
次に、PHPで最もよく使われる3つの設計モードを学びます.単例設計モード、工場設計モード、観察者設計モードです.
シングルデザインモード
単一のインスタンスモードとは、アプリケーションにはクラスのインスタンスが最大1つしか存在しません.作成すると、メモリに常に存在します.
単一設計モードはデータベースクラス設計によく用いられ、単一モードを採用し、一度だけデータベースに接続し、複数のデータベース接続を開くことを防止する.
1つの単例クラスは以下の特徴を備えなければならない.
単一のインスタンスクラスは直接インスタンス化することはできませんが、クラス自体でのみインスタンス化できます.したがって、このような制限効果を得るには、クラスがインスタンス化されないように、コンストラクション関数にprivateとマークする必要があります.
クラスインスタンスを保存し、インスタンスにアクセスできる公開静的メソッドを公開するために、プライベート静的メンバー変数が必要です.
PHPでは、単一のクラスインスタンスのクローン化を防止するために、通常、空のプライベート__clone()メソッドも提供される.
単一モードの例:

 
 
 

工場設計モード
ファクトリ設計モードは、入力パラメータの違いやアプリケーション構成の違いに基づいて、インスタンス化および対応するクラスを返すためのインスタンスを作成するのによく使用されます.
たとえば、長方形、円に同じ方法があると仮定すると、ベースクラスが提供するAPIでインスタンスを作成すると、パラメータを伝達することで対応するクラスのインスタンスが自動的に作成され、周長と面積を取得する機能があります.

 
width = $width;
    $this->height = $height;
  }
 
  publicfunctiongetArea() 
  {
    return $this->width* $this->height;
  }
 
  publicfunctiongetCircumference()
  {
    return 2 * $this->width + 2 * $this->height;
  }
}
 
/**
*   
*/
class Circle implementsInterfaceShape
{
  private $radius;
 
  function__construct($radius)
  {
    $this->radius = $radius;
  }
 
 
  publicfunctiongetArea() 
  {
    return M_PI * pow($this->radius, 2);
  }
 
  publicfunctiongetCircumference()
  {
    return 2 * M_PI * $this->radius;
  }
}
 
/**
*      
*/
class FactoryShape 
{ 
  publicstatic functioncreate()
  {
    switch (func_num_args()) {
      case1:
      return newCircle(func_get_arg(0));
      case2:
      return newRectangle(func_get_arg(0), func_get_arg(1));
      default:
        # code...
        break;
    }
  } 
}
 
$rect =FactoryShape::create(5, 5);
// object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) }
var_dump($rect);
echo "
"; // object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) } $circle =FactoryShape::create(4); var_dump($circle);

オブザーバ設計モード
観察者モードはよく見られる設計モードであり、適切に使用するとプログラムに非常に便利さをもたらし、適切に使用しないと、後世にメンテナンスしにくい考えを与える.
オブザーバーモードとは?1つのオブジェクトは、別のオブジェクト、すなわち観察者が自分を登録することを提供することによって、それ自体を観察可能にする.観察可能なオブジェクトが変更されると、登録された観察者にメッセージが送信されます.これらの観察者がこの情報を用いて実行する操作は、観察可能なオブジェクトとは無関係である.その結果、オブジェクトは理由を理解する必要がなく、対話することができます.観察者モードはイベントシステムであり、このモードはあるクラスが別のクラスの状態を観察することを可能にし、観察されたクラスの状態が変化したとき、観察クラスは通知を受け、対応する動作を行うことができることを意味する.オブザーバモードは、コンポーネント間の緊密な結合を回避します.次の例を見ればわかるよ.

 
observer_name;
  }
 
  functiononListen($sender, $args)
  {
 
  }
}
 
//      
abstractclass Observable implementsInterfaceObservable 
{
  protected $observers = array();
 
  publicfunctionaddObserver($observer) 
  {
    if ($observerinstanceofInterfaceObserver) 
    {
      $this->observers[] = $observer;
    }
  }
 
  publicfunctionremoveObserver($observer_name) 
  {
    foreach ($this->observersas $index => $observer) 
    {
      if ($observer->getObserverName() === $observer_name) 
      {
        array_splice($this->observers, $index, 1);
        return;
      }
    }
  }
}
 
//            
class A extendsObservable 
{
  publicfunctionaddListener($listener) 
  {
    foreach ($this->observersas $observer) 
    {
      $observer->onListen($this, $listener);
    }
  }
}
 
//         
class B extendsObserver 
{
  protected $observer_name = 'B';
 
  publicfunctiononListen($sender, $args) 
  {
    var_dump($sender);
    echo "
"; var_dump($args); echo "
"; } } // class C extendsObserver { protected $observer_name = 'C'; publicfunctiononListen($sender, $args) { var_dump($sender); echo "
"; var_dump($args); echo "
"; } } $a = new A(); // $a->addObserver(new B()); $a->addObserver(new C()); // $a->addListener('D'); // $a->removeObserver('B'); // : // object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } } // string(1) "D" // object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } } // string(1) "D"

小結
PHPの世界に初めて入って、今ただこれらの基本的な设计のモードだけを理解して、ゆっくりと学んで応用します!もし文章の中に間違いがあれば、コメントの中で指摘してください.私は明確にしてから文章の内容を訂正します.