ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルのデザイン パターンの例 ファクトリ パターンとシングルトン パターン

php_PHP チュートリアルのデザイン パターンの例 ファクトリ パターンとシングルトン パターン

WBOY
WBOYオリジナル
2016-07-13 17:00:06763ブラウズ

PHP のデザインパターンファクトリーパターンとシングルトンパターンの例。必要な友人はそれを参照できます。

1.ファクトリーモード


ファクトリ パターンは、オブジェクトを作成する特定のメソッドを持つクラスです。 new を直接使用せずに、ファクトリ クラスを使用してオブジェクトを作成できます。このようにすると、作成されるオブジェクトのタイプを変更する場合は、ファクトリを変更するだけで済みます。このファクトリを使用するすべてのコードは自動的に変更されます。


主な機能は結合を低減することです。

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

抽象クラス操作{
抽象パブリック関数 getValue($num1,$num2);
パブリック関数 getAttr(){
return 1;
}
}
class Add extends オペレーション{
パブリック関数 getValue($num1, $num2){
戻り $num1+$num2;
}
}

クラスサブは操作を拡張します{
パブリック関数 getValue($num1, $num2){
return $num1-$num2;
}
}

クラスファクトリー{
パブリック静的関数 CreateObj($operation){

スイッチ ($operation){
case '+': return new Add();
case '-': 新しい Sub() を返します;
}

}
}

$Op=Factory::CreateObj('-');
echo $Op->getValue(3, 6);

実際の開発で使用されるのは、一般的にデータベース選択クラスとして使用されます。


例 2 は、ファクトリ メソッドの使用例を示しています。

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

インターフェイス IUser
{
関数 getName();
}

クラス User は IUser を実装します
{
パブリック静的関数 Load( $id )
{
return 新しいユーザー( $id );
}

パブリック静的関数 Create( )
{
return new User( null );
}

パブリック関数 __construct( $id ) { }

パブリック関数getName()
{
「ジャック」を返します;
}
}

$uo = ユーザー::Load( 1 );
echo( $uo->getName()."n" );
?>

このコードは非常に単純です。インターフェイス IUser が 1 つと、このインターフェイスを実装する User クラスが 1 つだけあります。 User クラスには、オブジェクトを作成するための 2 つの静的メソッドがあります。この関係は、図 2 の UML で表すことができます


PHP のファクトリーモードによる効率の向上


以下の4つのファイルを作成します

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

index.php

include_once("f.inc.php");
$f=新しい工場;
$t1=&$f->create('T1');
echo $t1->getName();
echo $config;
?>
f.inc.php

クラスファクトリー
{
関数ファクトリー()
{
$this->mClasses=array('T1'=>'t1.inc.php','T2'=>'t2.inc.php');
}
関数&create($class)
{
if (!class_exists($class))
{
require_once($this->mClasses[$class]);
}
新しい $class を返します;
}
}
?>
t1.inc.php

グローバル $config;
$config='サーフチェン';
クラスT1
{
var $mName='名前::T1';
関数getName()
{
$this->mName;
を返します }
}
?>
t2.inc.php

クラスT2
{
関数 T2()
{
echo 't2 は OK';
}
}
?>

index.php では、ファクトリ クラスを通じて他のクラスのインスタンスを作成します。
ファクトリには、array("クラス名" => "クラスファイルパス") の形式で保存された配列 $this->mClasses があります。
Factory::create() でクラス インスタンスを作成すると、create() でまずクラスが存在するかどうかがチェックされ、存在しない場合は、$this-> に従ってクラスに対応するクラス ファイルがインクルードされます。 mクラス。次に、このクラスのインスタンスを作成して返します。

この方法では、実行するスクリプト (index.php など) にファクトリ クラス ファイルを含めるだけで済みます。

t1.inc.php の次の 2 行のコードにも注目してください。

コードは次のとおりです コードをコピー
グローバル $config;
$config='サーフチェン';

2 シングルトンモード

簡単に言えば、PHP シングルトン モードはクラスによって実装される関数であり、このクラスのインスタンスはアプリケーション全体に 1 つだけ存在します。

ファクトリ パターンは、オブジェクト指向のポリモーフィズムを強調しており、機能の違いをカプセル化して、データベース リンクなどの共通の機能を外部に実装できますが、データベース リンクを実装するには異なるメソッドを記述する必要がある場合があります。データベースが MySQL を使用しているか Oracle を使用しているかを知る必要はなく、query() メソッドを使用してデータベース上で対応する操作を実行することだけが必要です。これにより違いが隠蔽され、クラスがより堅牢になります。

コードは次のとおりですコードをコピー実際には、データベース接続クラスとファクトリモードとして使用され、パラメーターに従ってシングルトンモードを呼び出すことで、リソースの使用効率を向上させることができます
クラスMysql{

パブリック静的 $conn;
パブリック静的関数 getInstance(){
if (!self::$conn){
新しい自分();
return self::$conn;
}else {
return self::$conn;
}

}
プライベート関数 __construct(){
self :: $ conn = "mysql_connect:"; // mysql_connect( ''、 ''、 '') }

パブリック関数 __clone()
{
trigger_error("接続が 1 つだけ");
}
}

エコー Mysql::getInstance();

echo Mysql::getInstance();



http://www.bkjia.com/PHPjc/631278.html

tru​​ehttp://www.bkjia.com/PHPjc/631278.html技術記事 php のデザインパターンのファクトリーパターンとシングルトンパターンの例。必要な友人はそれを参照できます。 1. ファクトリ パターン ファクトリ パターンは、オブジェクトを作成する特定のメソッドを持つクラスです。あなたはできます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。