ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターンでのファクトリ パターンの紹介_PHP チュートリアル

PHP デザイン パターンでのファクトリ パターンの紹介_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:51:37858ブラウズ

質問

操作中に貼り付けたりコピーしたりせずに、このような「複雑な」オブジェクトを簡単かつ便利に作成するにはどうすればよいですか?

解決策

新しいオブジェクトを作成するためのファクトリ(関数またはクラスメソッド)を作成します。ファクトリの有用性を理解するには、次の違いを想像してください...

コード:

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

$connection =& new MySqlConnection($user, $password, $database);

...コードを拡張可能でより簡潔にします...

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

$connection =& create_connection();後者のコード スニペットは、先ほど述べたデータベース接続の create_connect() ファクトリに焦点を当てており、新しい操作と同様に、データベース接続の作成プロセスを単純な操作にします。ファクトリ パターンの利点は、オブジェクトの作成にあります。そのタスクは、オブジェクト作成プロセスをカプセル化し、必要な新しいクラスを返すことです。
オブジェクトの構造とオブジェクトの作成方法を変更したい場合は、オブジェクト ファクトリを選択し、コードを 1 回変更するだけで済みます。 (ファクトリ パターンの機能は非常に強力で、アプリケーションの下部にあるため、今後も他の多くの複雑なパターンやアプリケーションに登場します。)

サンプル コード

ファクトリ パターンは、オブジェクト作成プロセスをカプセル化します。オブジェクト自体にオブジェクト ファクトリを作成するか、特定のアプリケーションに応じて追加のファクトリ クラスを作成できます。ファクトリ オブジェクトの例を見てみましょう。

次のコードでは、データベース接続部分が繰り返し出現していることがわかりました:




コードをコピー
コードは次のとおりです: // PHP4
class Product {
function getList() { $ db =& new MysqlConnection (DB_USER, DB_PW, DB_NAME);
//...
}
function getByName($name) { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME);
}
//. ..
}

これはなぜ良くないのでしょうか? データベース接続パラメータが定数として設定されると、それらのパラメータに値が割り当てられることになります。このアプローチはあまり適切ではありません:

データベースに接続するためのパラメーターは簡単に変更できますが、すべての接続コードを変更しない限り、これらのパラメーターの順序を増やしたり変更したりすることはできません。
PostgresqlConnection など、別のデータベースに接続するための新しいクラスを簡単にインスタンス化することはできません。
これにより、接続オブジェクトのみのステータスをテストして検証することが困難になります。
ファクトリーデザインパターンを使用すると、コードは大幅に改善されます:




コードをコピーします
コードは次のとおりです: class Product { function getList() {
$db =& $this- >_getConnection( ; DB_NAME) メソッドは _getConnection() メソッドに集中しました。





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

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/319122.html

技術記事

質問: 操作中に貼り付けたりコピーしたりせずに、このような「複雑な」オブジェクトを簡単かつ便利に作成するにはどうすればよいですか? 解決策: ファクトリ (関数またはクラス メソッド) を作成して、新しい...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。