ホームページ  >  記事  >  バックエンド開発  >  PHPデザインパターン Template(テンプレートパターン)_PHPチュートリアル

PHPデザインパターン Template(テンプレートパターン)_PHPチュートリアル

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

相続関係はその欠点により、専門家によって「悪」のレッテルを貼られてきました。 「継承関係の代わりに委任関係を使用してください」、「抽象クラスの継承の代わりにインターフェイス実装を使用してみてください」、およびその他の専門家の警告を受けて、私たち新人は「継承を別の観点から見て」みましょう。実際、継承には依然としてそれ自体の多くの利点があります。ただ、誰からも虐待されることの欠点がより明らかになるように思えます。継承関係を合理的に使用することは、システム設計において依然として良い役割を果たすことができます。テンプレートメソッドパターンは使用例の一つです。

GOF は、一部のステップをサブクラスに延期しながら、テンプレート メソッド パターンの動作中のアルゴリズムのスケルトンを定義します。アルゴリズムの構造を変更せずに、サブクラスがアルゴリズムの特定のステップを再定義できるようにします。ここでのアルゴリズムの構造は、ニーズに応じて設計されたビジネス プロセスとして理解できます。具体的な手順はリンクにありますが、内容は異なる場合があります。

テンプレート メソッド パターンも、システムへの変更の影響を賢く解決するように設計されていることがわかります。テンプレート方式を使用すると、システムの拡張性が向上し、システムへの変更の影響が最小限に抑えられます。これは次の例で明らかです。

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

/**
* テンプレート パターン
*
* 操作のアルゴリズム スケルトンを定義し、一部のステップをサブクラスに延期します。これにより、サブクラスはアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを定義できます
*
*/
abstract class TemplateBase
{
public function Method1()
{
echo "abstract Method1< ;br/> ;";
}

public function Method2()
{
echo "abstract Method2
";
}

public function Method3()
{
echo "abstract Method3

パブリック関数 doSomeThing()
{
$this->Method1();
$this->Method2();
$this->Method3();
}
}

クラスTemplateObject extends TemplateBase
{
}

class TemplateObject1 extends TemplateBase
{
public function Method3()
{
echo "TemplateObject1 Method3
"
}
}

class TemplateObject2 extends TemplateBase
{
パブリック関数Method2 ()
{
echo "TemplateObject2 Method2
"
}
}
$objTemplate = new TemplateObject();
$objTemplate2 = new TemplateObject2() ) ;

$objTemplate->doSomeThing();
$objTemplate2->doSomeThing();


AbstractClass (抽象クラス):それらを実装するには特定のサブクラスが必要であり、アルゴリズムのスケルトンを定義するにはテンプレート メソッドも必要です。このテンプレート メソッドは、前の抽象メソッドを呼び出すだけでなく、その使命を完了できる限り、他の操作を呼び出すこともできます。

ConcreteClass (具象クラス): 親クラスに抽象メソッドを実装して、特定のサブクラスに関連するアルゴリズムのステップを完了します。
上記の定義の分析と例の説明によれば、テンプレートメソッドは次の状況に適していることがわかります:

アルゴリズムの変更されていない部分を一度に実装し、変数の動作はそのままにするサブクラス。
コードの重複を避けるために、各サブクラスの共通の動作を抽出して共通の親クラスに集中する必要があります。実際、これはコーディングの良い習慣であると言えます。
コントロールサブクラス拡張。テンプレート メソッドは特定のポイントでのみ操作を呼び出すため、そのポイントでのみ展開が可能です。たとえば、上記の runBare() メソッドは、runTest の前に setUp メソッドのみを適用します。テンプレート メソッドで定義されたフレームワークをサブクラスに変更させたくない場合は、2 つの方法で変更できます。1 つ目は、テンプレート メソッドを API に反映しないことです。2 つ目は、テンプレート メソッドを Final にすることです。
テンプレート メソッド パターンを使用すると、コードのパブリックな動作を抽出して再利用の目的を達成できることがわかります。さらに、テンプレート メソッド パターンでは、親クラスのテンプレート メソッドがサブクラスの特定の実装を制御します。この方法では、サブクラスを実装するときにビジネス プロセスについてあまり知る必要はありません。



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

tru​​ehttp://www.bkjia.com/PHPjc/323607.html技術記事相続関係はその欠点により、専門家によって「悪」のレッテルを貼られてきました。 「継承関係の代わりに委任関係を使用する」、「抽象クラスの継承の代わりにインターフェイス実装を使用してみる」など...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。