前の記事「PHP のテンプレート メソッド パターンの詳細分析」では、PHP のテンプレート メソッド パターンについて紹介しました。次の記事では、PHP デザイン パターンのシングルトンについて説明します。 。 モデル。
#シングルトン パターンは、一般的に使用され、頻繁に質問されるインタビュー デザイン パターンの中で間違いなく 1 位にランクされます。一方で、それは非常にシンプルであり、いくつかの言葉で説明できます。一方で、非常に複雑であり、その実装は 1 つの形式だけでなく、Java などの非同期言語におけるマルチスレッド ロックの問題も考慮する必要があります。したがって、面接中、面接官がシングルトン モデルについて質問するときにリラックスするとは思わないでください。このモデルは実際には深いことも浅いこともあり、開発者のレベルを非常に反映する可能性があります。一定期間仕事をしていると必ずこのモデルに触れる事になるからです。
GoF 定義: クラスにはインスタンスが 1 つだけあることを確認し、それにアクセスするためのグローバル アクセス ポイントを提供します。
#GoF クラス図
##コード実装class Singleton
{
private static $uniqueInstance;
private $singletonData = '单例类内部数据';
private function __construct()
{
// 构造方法私有化,外部不能直接实例化这个类
}
public static function GetInstance()
{
if (self::$uniqueInstance == null) {
self::$uniqueInstance = new Singleton();
}
return self::$uniqueInstance;
}
public function SingletonOperation(){
$this->singletonData = '修改单例类内部数据';
}
public function GetSigletonData()
{
return $this->singletonData;
}
}
はい、コアはそのようなシングルトン クラスであり、他には何もありません。インスタンス化後に静的変数自体を保存します。このオブジェクトが必要な場合は、GetInstance() メソッドを呼び出して、グローバルに一意のオブジェクトを取得します。
$singletonA = Singleton::GetInstance(); echo $singletonA->GetSigletonData(), PHP_EOL; $singletonB = Singleton::GetInstance(); if ($singletonA === $singletonB) { echo '相同的对象', PHP_EOL; } $singletonA->SingletonOperation(); // 这里修改的是A echo $singletonB->GetSigletonData(), PHP_EOL;
クライアントによって呼び出されると、
singletonB がまったく同じオブジェクトであることがわかります。 はい、コードからわかるように、シングルトンの最大の用途は、オブジェクトをグローバルに一意にすることです。完全なコード: https: //github.com/zhangyue0503/designpatterns-php/blob/master/21.singleton/source/singleton.php
Example
<?php class HttpService{ private static $instance; public function GetInstance(){ if(self::$instance == NULL){ self::$instance = new HttpService(); } return self::$instance; } public function Post(){ echo '发送Post请求', PHP_EOL; } public function Get(){ echo '发送Get请求', PHP_EOL; } } $httpA = new HttpService(); $httpA->Post(); $httpA->Get(); $httpB = new HttpService(); $httpB->Post(); $httpB->Get(); var_dump($httpA == $httpB);説明
Java などの静的言語の場合宣言
#instance = new HttpService(); では、静的変数を直接新しいオブジェクトにすることができます。このように、GetInstance() メソッドは省略できますが、この静的変数は使用されるかどうかに関係なく直接インスタンス化され、メモリを占有します。この種のシングルトンは、Hungry Chinese シングルトン パターンと呼ばれます。元のアドレス: https://juejin.cn/post/6844903990585458702著者: ハードコア プロジェクト マネージャー推奨学習: "
PHP ビデオ チュートリアル "
以上がPHP のシングルトン パターンについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。