ホームページ  >  記事  >  バックエンド開発  >  シングルトンパターンとは何ですか?

シングルトンパターンとは何ですか?

藏色散人
藏色散人転載
2019-04-15 16:04:424933ブラウズ



シングルトン パターンは、一般的に使用されるソフトウェア設計パターンです。そのコア構造には、シングルトン クラスと呼ばれる特別なクラスが 1 つだけ含まれています。シングルトン モードでは、システム内にクラスのインスタンスが 1 つだけ存在し、外部からそのインスタンスに簡単にアクセスできるようにすることができるため、インスタンス数の制御が容易になり、システム リソースが節約されます。特定のクラスのオブジェクトを 1 つだけシステム内に存在させたい場合は、シングルトン パターンが最適なソリューションです。

クラスにインスタンスが 1 つだけあり、このインスタンスに簡単にアクセスできるようにするにはどうすればよいでしょうか?グローバル変数を定義すると、いつでもオブジェクトにアクセスできるようになりますが、複数のオブジェクトのインスタンス化が妨げられるわけではありません。より良い解決策は、クラス自体にその唯一のインスタンスの保存を担当させることです。このクラスは、他のインスタンスが作成されないことを保証し、インスタンスにアクセスするメソッドを提供します。これがシングルトン パターンの背後にあるパターンの動機です。

たとえば、php の開発プロセス中に、db クラス (データベース操作クラス) を作成しました。その後、php ファイル内のデータベースは 1 回だけ接続でき、1 つのデータベースに必要なデータベースは 1 つだけであることを望みます。 php ファイル。オブジェクトです!データベースに複数回接続すると、PHP の実行効率が大幅に低下するためです。また、システムに大きなオーバーヘッドが発生します。

シングルトン モードを使用してデータベースをカプセル化する

<?php
class db
{
//使用一个静态变量记录db对象初始化时为null
public static $db = null;
/* 私有构造函数是类无法完成外部的调用
* 意味着您将无法使用 $xx = new db();
*/
private function __construct(){
echo &#39;连接数据库....&#39;;
}
/* 
* 使用静态方法去获取数据对象
* 获取时先判断db对象是否已经存在,如果存在则直接返回db对象反正则创建这个对象
*/
public static function getInstance(){
if(self::$db == null){
self::$db = new db();
}
return self::$db;
}
public function query($sql){
echo &#39;执行sql命令&#39;;
}
public function __destruct(){
echo &#39;关闭数据库连接....&#39;;
}
}
$db = db::getInstance();
$db1 = db::getInstance();
$db->query(&#39;test&#39;);
$db2 = db::getInstance();
//输出 : 连接数据库....执行sql命令关闭数据库连接....

//db オブジェクトを何度取得しても、名前は異なっていても、それらはすべて同じオブジェクトを表していることがわかります。これによりシングルトン パターンが実装されます。



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

声明:
この記事はhcoder.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。