ホームページ > php教程 > php手册 > PHPデザインパターンにおけるファクトリーパターンの紹介

PHPデザインパターンにおけるファクトリーパターンの紹介

WBOY
リリース: 2016-06-13 12:28:19
オリジナル
1188 人が閲覧しました

質問

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

解決策

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

コード:

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


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


... コードをスケーラブルでより簡潔にします...

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


$connection =& create_connection(); >
後者 コード スニペットは、データベースに接続する create_connect() ファクトリに焦点を当てています。先ほど述べたように、データベース接続を作成するプロセスは、新しい操作と同様に単純な操作になります。ファクトリ パターンの利点は、オブジェクトの作成にあります。そのタスクは、オブジェクト作成プロセスをカプセル化し、必要な新しいクラスを返すことです。


オブジェクトの構造とオブジェクトの作成方法を変更したい場合は、オブジェクト ファクトリを選択し、コードを 1 回変更するだけで済みます。 (ファクトリ パターンの機能は非常に強力で、アプリケーションの下部にあるため、今後も他の多くの複雑なパターンやアプリケーションで使用されます。)

サンプル コード

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

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



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

// 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();
//...
}
function &_getConnection( ) {
_getConnection() メソッドで新しい MysqlConnection (DB_USER、DB_PW、DB_NAME) を返します。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート