php設計モードの工場モードの浅い分析
php工場モデルのいくつかの内容を共有します.php設計モードでは,工場モードが比較的多い.
質問:このような「複雑」なオブジェクトを簡単に作成するには、操作中にコピーを貼り付ける必要はありませんか?
解決策
新しいオブジェクトを作成するためのファクトリ(関数またはクラスメソッド)を作成します.工場の使い道を理解するために、以下の違いを考えてみると…
コード:
$connection =& new MySqlConnection($user, $password, $database);
...コードを拡張し、より簡潔にする......
$connection =& create_connection();
後者のコード・スライスは、データベースに接続されたcreate_に集中します.connect()工場では、さっき言ったように、データベース接続を作成するプロセスを簡単な操作にします.new操作のように.ファクトリモードの利点は、オブジェクトの作成にあります.オブジェクトの作成プロセスをカプセル化し、必要な新しいクラスを返すタスクです.
オブジェクトの構造とオブジェクトの作成方法を変更したいですか?オブジェクトファクトリを選択するだけで、コードの変更は一度で十分です.(ファクトリモードの機能は、アプリケーションの最下位にあるため、他の多くの複雑なモードとアプリケーションで絶えず現れます.)
サンプルコード
ファクトリモードは、オブジェクトの構築プロセスをカプセル化します.オブジェクト自体にオブジェクトファクトリを作成したり、追加のファクトリクラスを作成したりすることができます.これは、特定のアプリケーションによって異なります.工場のオブジェクトの例を見てみましょう.
データベース接続の部分はしばしば現れます.
どうしてこんなことができないの?データベース接続のパラメータが多すぎます.これらのパラメータを定数に設定すると、定義を統一して値を割り当てることを意味します.この方法は適切ではありません.
データベースに接続するパラメータを簡単に変更できますが、すべての接続コードを変更しない限り、これらのパラメータの順序を追加または変更することはできません.
新しいクラスを簡単にインスタンス化して別のデータベースに接続することはできません.例えば、PostgresqlConnectionなどです.
これにより、接続オブジェクトの状態を個別にテストして確認することは困難です.
工場設計モデルを使用すると、コードが大幅に改善されます.
以前のクラスにはnew MysqlConnection(DB_USER,DB_PW,DB_NAME)を呼び出す方法が多く存在していたが,現在は集約されている_getConnection()メソッド上.
参照リンク: phpファクトリモードインスタンスコード php設計モードの単例モード、工場モードと観察者モード PHPファクトリモードの例分析 php設計モードの例のファクトリモード php設計モードのファクトリモードのインスタンスコード php常用設計モードの工場モードと単例モード紹介
質問:このような「複雑」なオブジェクトを簡単に作成するには、操作中にコピーを貼り付ける必要はありませんか?
解決策
新しいオブジェクトを作成するためのファクトリ(関数またはクラスメソッド)を作成します.工場の使い道を理解するために、以下の違いを考えてみると…
コード:
$connection =& new MySqlConnection($user, $password, $database);
...コードを拡張し、より簡潔にする......
$connection =& create_connection();
後者のコード・スライスは、データベースに接続されたcreate_に集中します.connect()工場では、さっき言ったように、データベース接続を作成するプロセスを簡単な操作にします.new操作のように.ファクトリモードの利点は、オブジェクトの作成にあります.オブジェクトの作成プロセスをカプセル化し、必要な新しいクラスを返すタスクです.
オブジェクトの構造とオブジェクトの作成方法を変更したいですか?オブジェクトファクトリを選択するだけで、コードの変更は一度で十分です.(ファクトリモードの機能は、アプリケーションの最下位にあるため、他の多くの複雑なモードとアプリケーションで絶えず現れます.)
サンプルコード
ファクトリモードは、オブジェクトの構築プロセスをカプセル化します.オブジェクト自体にオブジェクトファクトリを作成したり、追加のファクトリクラスを作成したりすることができます.これは、特定のアプリケーションによって異なります.工場のオブジェクトの例を見てみましょう.
データベース接続の部分はしばしば現れます.
// PHP
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() {
return new MysqlConnection(DB_USER, DB_PW, DB_NAME);
}
}
以前のクラスにはnew MysqlConnection(DB_USER,DB_PW,DB_NAME)を呼び出す方法が多く存在していたが,現在は集約されている_getConnection()メソッド上.
参照リンク: