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

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

Jul 13, 2016 pm 05:00 PM
php シングルトン そして 工場 持っている 友人 モデル デザインパターン

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 は、ファクトリ メソッドの使用例を示しています。

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

<?php
インターフェイス 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

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

<?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

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

<?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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles