ホームページ > バックエンド開発 > PHPチュートリアル > PHP実装設計パターンにおけるシングルトンパターンの詳細説明、PHP設計パターンの詳細説明_PHPチュートリアル

PHP実装設計パターンにおけるシングルトンパターンの詳細説明、PHP設計パターンの詳細説明_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:17:29
オリジナル
847 人が閲覧しました

PHP実装設計パターンにおけるシングルトンパターンの詳細説明、PHP設計パターンの詳細説明

【概要】

クラスにインスタンスが 1 つだけあることを確認し、それにアクセスするためのグローバル アクセス ポイントを提供する [GOF95]

【特徴】

1. クラスにはインスタンスが 1 つだけあります
2. このインスタンスを独自に作成する必要があります
3. このインスタンスをシステム全体に自分で提供する必要があります

【構造図】

【主人公】

シングルトンはインスタンス操作を定義し、クライアントがその唯一のインスタンスにアクセスできるようにします。インスタンスはクラスメソッドです。唯一のインスタンスの作成を担当します。

【メリットとデメリット】

1. 固有のインスタンスへのアクセス制御
2. 名前空間を縮小します。シングルトン モードは、グローバル変数の改良版です。一意のインスタンスを格納するグローバル変数による名前空間の汚染を回避します
3. 操作とプレゼンテーションの本質を考慮して、シングルトン クラスにサブクラスを含めることができます。また、この拡張クラスのインスタンスを使用してアプリケーションを構成するのは非常に簡単です。実行時に必要なクラスのインスタンスを使用してアプリケーションを構成できます。
4. インスタンスの可変数を許可します (マルチインスタンスモード)
5.クラス運用よりも柔軟

【適用範囲】

1. クラスがインスタンスを 1 つだけ持つことができ、クライアントが既知のアクセス ポイントからアクセスできる場合
2. このインスタンスのみがサブクラス化を通じて拡張可能である必要がある場合。また、ユーザーはコードを変更せずに拡張インスタンスを使用できる必要があります。

【シングルトンモードPHPインスタンス】

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

/**
* シングルトンモード
*---------------
* @author zhaoxuejie
*@パッケージデザインパターン
* @バージョン v1.0 2011-12-14
​*/
クラス シングルトン {

//プライベート静的メンバー変数、グローバルインスタンスを保存
プライベート静的 $instance = NULL;

//外部が直接インスタンス化できないようにするためのプライベート構築メソッド
プライベート関数 __construct(){}

//静的メソッドは、このクラスの唯一のインスタンスを返します
パブリック静的関数 getInstance(){
if(!isset(self::$instance)){
$c = __CLASS__;
Self::$instance = 新しい $c;
}
self::$instance を返します;
}

//テスト方法
パブリック関数 info(){
「OK」を返します;
}

//クローン作成を防止します
パブリック関数 __clone(){
trigger_error('クローンは許可されていません。', E_USER_ERROR);
}
}

$s = シングルトン::getInstance();
echo $s->info();
?>

phpデザインパターン: ファクトリパターンとモノモーフィックパターンのPHP5サンプルコードを作成します

例 #1 ファクトリ メソッドを呼び出す (パラメータ付き)

class Example
{
// パラメータ化されたファクトリ メソッド
public static function Factory($type)
{
if (include_once 'Drivers/' . $ type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('ドライバーが見つかりません');
}
}
}
?> ;
----------------------------------------
例 #2 シングルトン パターン

class Example
{
// この属性にクラス インスタンスを保存します
private static $instance;

// オブジェクトの直接作成を防ぐために、コンストラクターは private と宣言されます
private function __construct()
{
echo '私は構築されました ';
}

// シングルトンメソッド
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}

return self::$instance;
}

// サンプルクラスの通常のメソッド
public function bark()
{
echo 'Woof!';
}

// ユーザーがオブジェクト インスタンスをコピーしています
public function __clone()
{
trigger_error('クローンは許可されていません。', E_USER_ERROR);
}

}

?>

PHP のモノモーフィックなデザインパターン

Java に関しては、プログラマーはシングルトン デザイン パターンと呼びますが、PHP では、この用語は異なります:

シングルトン パターン (Singleton) は、次のように使用されます。クラスに固有のオブジェクトを生成します。最も一般的に使用される場所はデータベース接続です。 シングルトン パターンを使用してオブジェクトを生成した後、そのオブジェクトは他の多くのオブジェクトで使用できます。
class Example
{
// この属性にクラスインスタンスを保存します
private static $instance;

// オブジェクトの直接作成を防ぐために、コンストラクターはプライベートとして宣言されます
private function __construct()
{
echo '私は構築されています';
}

// シングルトンメソッド
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$ instance = new $c;
}

return self::$instance;
}

// Exampleクラスの通常のメソッド
public function bark()
{
echo 'Woof!';
}

// ブロックuser オブジェクトのインスタンスをコピーします
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}

}

?>

このようにして、サンプルクラス。

// コンストラクターがprivateとして宣言されているため、この書き方は間違っています
$test = new Example;

// 以下は、Exampleクラスのシングルトンオブジェクトを取得します
$test = Example ::singleton( );
$test->bark();

// オブジェクトをコピーすると E_USER_ERROR が発生します。
$test_clone = clone $test;
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/892261.html技術記事 PHP実装設計パターンにおけるシングルトンパターンの詳細説明、PHP設計パターンの詳細説明 [概要] クラスのインスタンスが 1 つだけであることを確認し、それにアクセスするためのグローバル アクセス ポイントを提供する [GOF95] [特別...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート