PHPでのシングルトンパターンとファクトリーパターンの使い方

シングルトンパターンやファクトリーパターンなどのデザインパターンはPHPでも利用できます。

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

シングルトンパターンとは、あるクラスのインスタンスオブジェクトが必ず1つだけになるように保証するパターンです。PHPにおいては、以下のような手順で実装できます。

  1. privateコンストラクタを作成し、直接オブジェクトを外部からインスタンス化できないようにする。
  2. インスタンスオブジェクトを保持するためのプライベートな静的プロパティを作成する。
  3. クラスのインスタンスを取得するpublic staticメソッドを作成。このメソッドは、インスタンスが既に存在するかを判定し、存在しない場合は新しいインスタンスを作成して返却、存在する場合は既存のインスタンスを直接返却する。
class Singleton {
private static $instance;
private function __construct() {
// 私有构造方法,防止外部实例化对象
}
public static function getInstance() {
if (self::$instance == null) {
self::$instance = new self();
}
return self::$instance;
}
}

シングルトンパターンでは、クラスのgetInstance()メソッドからインスタンスを取得し、常に同じインスタンスが返されるようにする。

  1. ファクトリーメソッド

ファクトリーメソッドパターンとは、ファクトリークラスを用いてオブジェクトを生成するパターンです。 PHPでは、次のようにファクトリーメソッドパターンを導入できます。

  1. オブジェクトを生成するためのメソッドを持つファクトリクラスを作成します。
  2. パラメータや条件によって異なるオブジェクトをファクトリメソッド内で生成し返す
interface Shape {
public function draw();
}
class Circle implements Shape {
public function draw() {
echo "Draw a circle";
}
}
class Rectangle implements Shape {
public function draw() {
echo "Draw a rectangle";
}
}
class ShapeFactory {
public static function createShape($type) {
switch ($type) {
case 'circle':
return new Circle();
break;
case 'rectangle':
return new Rectangle();
break;
default:
throw new Exception('Invalid shape type');
}
}
}
// 使用工厂类创建对象
$circle = ShapeFactory::createShape('circle');
$rectangle = ShapeFactory::createShape('rectangle');
$circle->draw();    // 输出:Draw a circle
$rectangle->draw(); // 输出:Draw a rectangle

ShapeFactoryクラスのcreateShape()メソッドを使用し、引数に応じて異なるオブジェクトを作成し、オブジェクトの作成と使用を分離した。

bannerAds