ファクトリ モードに関する質問
例 #1 ファクトリ メソッドの呼び出し (パラメータ付き)
class Example
{
// パラメータ化されたファクトリ メソッド
public static function Factory( $type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
上記の方法に従って、ドライバーを動的にロードできます。 Example クラスがデータベース抽象クラスの場合、次のように MySQL および SQLite ドライバー オブジェクトを生成できます:
// MySQL ドライバーをロード
$mysql = Example::factory('MySQL ' );
// SQLite ドライバーをロードします
$sqlite = Example::factory('SQLite');
?>
元のアドレス:
http://www.php.net/manual/zh/ language.oop5.patterns.php
このパターンが何をするのか知りたいです
さらに、これには次の内容が含まれていますファイルのクラス名には「Driver_」という接頭辞を付ける必要があり、非常に不便で制限的ではありませんか。
これはどのようなダイナミクスを実現しますか?
-----解決策---------
Driver_MySQL と Driver_SQLite は同じインターフェイスを実装しています。そうすれば、プログラムはデータベースの種類を気にする必要がなくなり、将来のデータベース システムの置き換えが容易になります (もちろん SQL ステートメントに問題がまだあるかもしれません)
Driver_ がなぜprefix が付いているのは、クラス名が重複することを心配したためか、管理の便宜を図るためこのように設定されています。
------解決策---------
このモードは何をしますか...
抽象型のオブジェクトを作成するとき、ファクトリ パターンはそれを実装するために
ドライバーを使用すると目を引くと思いませんか? $a,$ は変数名です? b,$c 自分が何をしているのか理解できると思いますか?推測すらできないと思います...