ホームページ  >  記事  >  バックエンド開発  >  PHP で一般的に使用される 3 つの設計パターン、シングルトン設計パターン、ファクトリ設計パターン、およびオブザーバー設計パターンを紹介します。

PHP で一般的に使用される 3 つの設計パターン、シングルトン設計パターン、ファクトリ設計パターン、およびオブザーバー設計パターンを紹介します。

伊谢尔伦
伊谢尔伦オリジナル
2017-07-01 13:24:171395ブラウズ

この記事では、PHP で最も一般的に使用される 3 つの デザイン パターン、つまりシングルトン デザイン パターン、ファクトリ デザイン パターン、オブザーバー デザイン パターンについて簡単に紹介します。これらはすべて個人的な経験の要約ですので、気に入っていただければ幸いです

この記事は、PHP で一般的に使用される 3 つのデザイン パターンについてのメモと要約です。 . なぜデザインパターンが必要なのでしょうか?その誕生は私たち開発者にとってどのような役割と意味を持っているのでしょうか?

iOSを開発している人はデザインパターンに精通していると思いますよね?たとえば、シングルトン設計パターン、ファクトリ設計パターン、オブザーバー パターン、MVC フレームワーク設計パターンなどです。

次に、PHP で最も一般的に使用される 3 つのデザイン パターン、シングルトン デザイン パターン、ファクトリー デザイン パターン、オブザーバー デザイン パターンを学びましょう。

単一ケース設計パターン

いわゆる単一ケースパターンは、このクラスのインスタンスがアプリケーション内に一度作成されると、常にメモリ内に存在することを意味します。

シングルトン設計パターンは、データベース クラスの設計でよく使用されます。シングルトン モードは、複数のデータベース接続が開かれないようにするために、データベースに 1 回だけ接続するために使用されます。

シングルトン クラスは次の特性を持つ必要があります:

シングルトン クラスは直接インスタンス化によって作成することはできませんが、クラス自体によってのみインスタンス化できます。したがって、このような制限効果を得るには、コンストラクターをプライベートとしてマークし、クラスがインスタンス化されないようにする必要があります。

クラスインスタンスを保存し、インスタンスにアクセスできるパブリック静的メソッドを公開するには、プライベート静的メンバー変数が必要です。

PHP では、他の人がシングルトン クラス インスタンスを複製できないようにするために、通常、空のプライベート clone() メソッドが提供されます。

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

<?php
 
/**
* Singleton of Database
*/
class Database
{
  // We need a static private variable to store a Database instance.
  privatestatic $instance;
 
  // Mark as private to prevent it from being instanced.
  privatefunctionconstruct()
  {
    // Do nothing.
  }
 
  privatefunctionclone() 
  {
    // Do nothing.
  }
 
  publicstatic functiongetInstance() 
  {
    if (!(self::$instanceinstanceofself)) {
      self::$instance = newself();
    }
 
    returnself::$instance;
  }
}
 
$a =Database::getInstance();
$b =Database::getInstance();
 
// true
var_dump($a === $b);

ファクトリ デザイン パターン

ファクトリ デザイン パターンは、さまざまな入力パラメーターまたはアプリケーション構成に基づいて、対応するクラスをインスタンス化して返すように特別に設計されたクラスを作成するためによく使用されます。

例を見てみましょう。長方形と円が同じメソッドを持っているとします。次に、基本クラスが提供する API を使用してインスタンスを作成すると、それらはすべてパラメータを渡すことで、対応するクラスのインスタンスを自動的に作成します。周囲と面積。

<?php
 
interfaceInterfaceShape 
{
 functiongetArea();
 functiongetCircumference();
}
 
/**
* 矩形
*/
class Rectangle implementsInterfaceShape
{
  private $width;
  private $height;
  
  publicfunctionconstruct($width, $height)
  {
    $this->width = $width;
    $this->height = $height;
  }
 
  publicfunctiongetArea() 
  {
    return $this->width* $this->height;
  }
 
  publicfunctiongetCircumference()
  {
    return 2 * $this->width + 2 * $this->height;
  }
}
 
/**
* 圆形
*/
class Circle implementsInterfaceShape
{
  private $radius;
 
  functionconstruct($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 "<br>";
 
// object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) }
$circle =FactoryShape::create(4);
var_dump($circle);

オブザーバー デザイン パターン

オブザーバー パターンは、適切に使用するとプログラムに大きな利便性をもたらしますが、不適切に使用すると、保守が困難なアイデアを将来の世代に与えることになります。

オブザーバーパターンとは何ですか?オブジェクトは、別のオブジェクト (オブザーバー) が自分自身を登録できるようにするメソッドを提供することによって、自分自身を監視可能にします)。監視可能なオブジェクトが変化すると、登録されたオブザーバーにメッセージが送信されます。これらのオブザーバーは、この情報を使用して、監視可能なオブジェクトとは独立して操作を実行します。その結果、オブジェクトは理由を理解することなく相互に通信できるようになります。オブザーバー パターンはイベント システムです。つまり、このパターンにより、クラスが別のクラスの状態を監視できるようになり、監視しているクラスは通知を受け取り、対応するアクションを実行できます。コンポーネント間の密結合を回避する機能を備えています。以下の例を見れば理解できるでしょう。

りー

以上がPHP で一般的に使用される 3 つの設計パターン、シングルトン設計パターン、ファクトリ設計パターン、およびオブザーバー設計パターンを紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。