ホームページ  >  記事  >  バックエンド開発  >  phpシングルトンモードの簡単な分析、phpモードの簡単な分析_PHPチュートリアル

phpシングルトンモードの簡単な分析、phpモードの簡単な分析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:13:151016ブラウズ

PHPシングルトンモードの簡単な分析、PHPモードの簡単な分析

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

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

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

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

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

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

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

コードをコピーします コードは次のとおりです:

/**
* シングルトンモード
​​*/
クラスDbConn
{
private static $_instance = null;
保護された静的 $_counter = 0;
protected $_db;
//プライベートコンストラクター、インスタンスの外部作成は許可されません
プライベート関数 __construct()
{
self::$_counter += 1;
}
パブリック関数 getInstance()
{
if (self::$_instance == null)
{
self::$_instance = new DbConn();
}
return self::$_instance;
}
パブリック関数 connect()
{
echo "connected: ".(self::$_counter)."n";
return $this->_db;
}
}
/*
※シングルトンモードを使用しない場合は、コンストラクタのprivateを削除して、2回目のコンストラクタ呼び出し後に_counterが2
になります。 */
// $conn = new DbConn();
// $conn->connect();
// $conn = new DbConn();
// $conn->connect();
// シングルトン モードを使用した後は、オブジェクトを直接新規作成することはできません。オブジェクトを取得するには getInstance を呼び出す必要があります
$conn = DbConn::getInstance();
$db = $conn->connect();
// 2 回目の呼び出しは同じインスタンスであり、_counter は 1 のままです
$conn = DbConn::getInstance();
$db = $conn->connect();

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

PHP デザインパターンのシングルトンパターンについて何か知っていますか?次回はファクトリーパターンを紹介します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/917031.html技術記事 PHP シングルトン パターンの簡単な分析、PHP パターンの簡単な分析 このシリーズの記事は、PHP でのデザイン パターンの適用についてまとめたものです。これは、シングルトン パターンの作成パターンに関する最初の記事です。 1. デザインパターンの紹介 まずは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。