PHPシングルトンパターンとは何ですか?シングルトンモードの使い方の詳しい説明

伊谢尔伦
リリース: 2023-03-12 13:44:02
オリジナル
3413 人が閲覧しました

この記事はデザインパターンの概念から始まり、PHPデザインパターンのシングルトンパターンについて説明します。これは基礎知識であり、初心者に上達する機会を提供します。

この一連の記事は、PHP でのデザイン パターンの適用についてまとめています。これは、作成パターンのシングルトン パターンに関する最初の記事です。

1. デザインパターンの紹介
まず、デザインパターンとは何ですか:
デザインパターンとは、繰り返し使用され、簡単に使用できる、信頼性の高いコード設計の経験をまとめたものです。他人からも理解され、信頼される。
デザインパターンはJavaの特許ではありません。オブジェクト指向の手法を使用してPHPでも23のデザインパターンをうまく使用できます。
それでは、私たちがよく話すアーキテクチャ、フレームワーク、デザインパターンの間にはどのような関係があるのでしょうか?
アーキテクチャは一連のシステム構造であり、プロジェクトの全体的なソリューションです。フレームワークは再利用可能な半完成ソフトウェアであり、特定のプログラム コードです。一般にアーキテクチャには、特定の問題の解決を高速化および最適化するためにどのような種類のフレームワークを使用するかが関係しており、優れたフレームワーク コードは多くの設計パターンを合理的に使用しています。

2. デザイン パターンのいくつかの原則を洗練する:

開閉の原則: モジュールは拡張の場合は開き、変更の場合は閉じる必要があります。
Richter 置換原則: 親クラスが呼び出された場合、それがサブクラスに置き換えられると、そのクラスを実行できます。
依存関係逆転の原則: 抽象化は詳細に依存せず、インターフェイス指向のプログラミングであり、渡されたパラメーターは高レベルのクラスを参照しようとします。
インターフェイス分離の原則: 各インターフェイスは 1 つの役割のみを担当します。
合成/集約の再利用の原則: 合成/集約を可能な限り使用し、継承を乱用しないでください。

3. デザインパターンの役割は何ですか?

デザインパターンで解決可能
乱雑なコードを置き換えて、適切なコードスタイルを形成
コードは読みやすく、エンジニアが簡単に理解できる
新しい機能を追加する際にインターフェイスを変更する必要がなく、強力な拡張性
安定性が高く、一般的に未知の問題は発生しない
デザイン パターンでは解決できません:
デザイン パターンはコードを整理するために使用されるテンプレートであり、直接呼び出されるライブラリではありません。
デザイン パターンは最も効率的ではありませんが、コードの読みやすさと保守性の方が重要です。デザインパターンを盲目的に追求して適用し、リファクタリングするときにさらに考えます。

IV. デザインパターンの分類

シングルケースパターン、ファクトリパターン(シンプルファクトリ、ファクトリメソッド、抽象ファクトリ)、クリエーターパターン、プロトタイプモード。
2. 構造モード:

アダプター モード
、ブリッジ モード、デコレーション モード、コンビネーション モード、外観モード、フライウェイト モード、プロキシ モード。 3. 動作パターン: テンプレートメソッドパターン、
イテレーターパターン
、オブザーバーパターン、メディエーターパターンメモパターン、インタプリタパターン、状態パターン、戦略パターン、責任連鎖パターン、ビジターモード5. 創造的なデザイン パターン1. シングルトン パターン
目的: クラスのインスタンスが 1 つだけであることを確認し、それにアクセスするためのグローバル アクセス ポイントを提供します。
アプリケーションシナリオ: データベース接続、キャッシュ操作、分散ストレージ。

コードは次のとおりです:

     /**
     * 单例模式
     */
class DbConn
{
       private static $_instance = null;
       protected static $_counter = 0;
       protected $_db;
       //私有化构造函数,不允许外部创建实例
       private function construct()
       {
              self::$_counter += 1;
       }
       public function getInstance()
       {
              if (self::$_instance == null)
              {
                     self::$_instance = new DbConn();
              }
              return self::$_instance;
       }
       public function connect()
       {
              echo "connected: ".(self::$_counter)."n";
              return $this->_db;
       }
}
/*
 * 不使用单例模式时,删除构造函数的private后再测试,第二次调用构造函数后,_counter变成2
*/
// $conn = new DbConn();
// $conn->connect();
// $conn = new DbConn();
// $conn->connect();
//使用单例模式后不能直接new对象,必须调用getInstance获取
$conn = DbConn::getInstance();
$db = $conn->connect();
//第二次调用是同一个实例,_counter还是1
$conn = DbConn::getInstance();
$db = $conn->connect();
ログイン後にコピー

特記事項: getInstance には if 判定があり、その後オブジェクトが生成されます。マルチスレッド言語では同時実行の問題が発生します。たとえば、Java ではメソッドに synchronized キーワードを追加して同期させる方法と、クラスのメンバ変数を定義するときに事前に _instac を初期化する方法がありますが、PHP ではこれら 2 つの方法をサポートしていません。ただし、PHP はマルチスレッドをサポートしていないため、この問題を考慮する必要はありません。

以上がPHPシングルトンパターンとは何ですか?シングルトンモードの使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!