Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation du modèle de méthode de modèle PHP

Explication détaillée de l'utilisation du modèle de méthode de modèle PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-17 11:50:445122parcourir

Cette fois, je vais vous apporter une explication détaillée de l'utilisation du modèle de méthode de modèle PHP. Quelles sont les précautions lors de l'utilisation du modèle de méthode de modèle PHP. Ce qui suit est un cas pratique, prenons un. regarder.

Qu'est-ce que le modèle de méthode de modèle

Méthode de modèle (méthode de modèle)Modèle de conception A La méthode de classe templateMethod() est utilisée, qui est une méthode concrète dans une classe abstraite. La fonction de cette méthode est de trier la séquence des méthodes abstraites, et l'implémentation spécifique est laissée à la classe concrète. Le modèle définit l'algorithme dans l'opération. Le "squelette" est implémenté par des classes concrètes.

Quand utiliser les méthodes de modèle

Si quelques étapes dans l'algorithme ont été clarifiés. Cependant, ces étapes peuvent être implémentées de différentes manières et vous pouvez utiliser la méthode modèle pour déboguer. Si les étapes de l'algorithme restent inchangées, vous pouvez laisser ces étapes à la sous-classe pour une implémentation spécifique. Dans ce cas, vous pouvez utiliser la méthode template pour concevoir le modèle. Pour organiser les opérations de base (fonctions/méthodes) dans la classe abstraite, les sous-classes implémentent ensuite ces opérations requises par l'application

Il y en a une autre. utilisation qui est légèrement plus compliquée, et vous devrez peut-être mettre les comportements communs des sous-classes dans une classe pour éviter la duplication de code.

Si vous utilisez plusieurs classes pour résoudre le même problème important, le code en double peut rapidement apparaître.

Encore une chose, vous pouvez utiliser des modèles. Le modèle de méthode contrôle l'expansion des sous-classes, ce qu'on appelle le "hook".

Exemple

En programmation PHP, vous pouvez souvent rencontrer un problème : Etablir une bande Image du titre de l'image Cet algorithme est assez simple, il s'agit d'afficher l'image, puis d'afficher le texte en dessous de l'image.

Étant donné que seuls deux participants sont impliqués dans la conception du modèle, il s'agit de l'un des modèles les plus faciles à comprendre, et en même temps également très utile pour les constructions d'abstraction

et cette méthode est implémentée par une classe concrète templateMethod()

Classe abstraite

La classe abstraite est la clé ici, car elle contient également des méthodes concrètes et abstraites. Les méthodes modèles sont souvent des méthodes concrètes et leurs opérations sont abstraites

Le. deux méthodes abstraites sont addPicture et addTitile. Les deux opérations contiennent respectivement un paramètre, représentant les informations URL et le titre de l'image .

Template.php

Cours de béton
<?php
abstract class Template
{
  protected $picture;
  protected $title;
  public function display($pictureNow, $titleNow)
  {
    $this->picture = $pictureNow;
    $this->title = $titleNow;
    $this->addPicture($this->picture);
    $this->addTitle($this->title);
  }
  abstract protected function addPicture($picture);
  abstract protected function addTitle($title);
}

Concrete.php

Client
<?php
include_once(&#39;Template.php&#39;);
class Concrete extends Template
{
  protected function addPicture($picture)
  {
    $this->picture = &#39;picture/&#39; . $picture;
    echo "图像路径为:" . $this->picture . &#39;<br />&#39;;
  }
  protected function addTitle($title)
  {
    $this->title = $title;
    echo "<em>标题: </em>" . $this->title . "<br />";
  }
}

Client .php

La variable $concrete instancie Concrete, mais elle appelle la méthode du modèle d'affichage, il s'agit d'une opération spécifique héritée de la classe parent. La classe parent appelle l'opération de la sous-classe via <.>.

<?php
function autoload($class_name)
{
  include $class_name . &#39;.php&#39;;
}
class Client
{
  public function construct()
  {
    $title = "chenqionghe is a handsome boy";
    $concrete = new Concrete();
    $concrete->display(&#39;chenqionghe.png&#39;, $title);
  }
}
$worker = new Client();
Après l'exécution, la sortie est

display()

Le chemin de l'image est : photo/ chenqionghe.png

Titre : chenqionghe est un beau garçon

Comme vous pouvez le voir, le client n'a qu'à fournir l'adresse et le titre de l'image

Modèle de conception de la méthode Le crochet dans

Parfois, la fonction de méthode modèle peut avoir une étape que vous ne souhaitez pas. Dans certains cas spécifiques, vous ne souhaiterez peut-être pas effectuer cette étape. Dans ce cas, la méthode modèle peut être utilisée Hook.Dans le Modèle de conception de méthode de modèle, vous pouvez utiliser des hooks pour intégrer une méthode au modèle, mais cette méthode n'est pas nécessairement utilisée. En d'autres termes, elle fait partie de la méthode, mais elle contient un hook et peut gérer les exceptions. peut ajouter un élément facultatif à l'algorithme.De cette façon, bien qu'il soit toujours exécuté dans l'ordre établi par la méthode modèle, il peut ne pas terminer l'action attendue par la méthode modèle. Pour cette situation facultative, les hooks sont l'outil le plus idéal. pour résoudre ce problème.

Exemple

Faites vos achats en ligne et bénéficiez d'une réduction de 20 % si le coût total du produit dépasse 200 yuans, 12,95 yuans seront supprimés. .

Établir un hook

Il est intéressant d'établir une méthode hook dans une méthode modèle Bien que les sous-classes puissent modifier le comportement du hook, elles doivent quand même suivre. la définition dans le modèle L'ordre de

IHook.php

<?php
abstract class IHook
{
  protected $hook;
  protected $fullCost;
  public function templateMethod($fullCost, $hook)
  {
    $this->fullCost = $fullCost;
    $this->hook = $hook;
    $this->addGoods();
    $this->addShippingHook();
    $this->displayCost();
  }
  protected abstract function addGoods();
  protected abstract function addShippingHook();
  protected abstract function displayCost();
}

这里有3个抽象方法: addGoods(), addShippingHook(),displayCost(), 抽象类IHook实现的templateMethod()中确定了它们的顺序. 在这里, 钩子方法放在中间, 实际上模板方法指定的顺序中, 钩子可以放在任意位置. 模板方法需要两个参数, 一个是总花费, 另外还需要一个变量用来确定顾客是否免收运费.

实现钩子

一旦抽象类中建立了这些抽象方法, 并指定了它们执行的顺序, 子类将实现所有这3个方法:

Concrete.php

<?php
class Concrete extends IHook
{
  protected function addGoods()
  {
    $this->fullCost = $this->fullCost * 0.8;
  }
  protected function addShippingHook()
  {
    if(!$this->hook)
    {
      $this->fullCost += 12.95;
    }
  }
  protected function displayCost()
  {
    echo "您需要支付: " . $this->fullCost . &#39;元<br />&#39;;
  }
}

addGoods和displayCost都是标准方法, 只有一个实现., 不过, addShippingHook的实现有所不同, 其中有一个条件来确定是否增加运费. 这就是钩子.

客户Client

Client.php

<?php
function autoload($class_name)
{
  include $class_name . &#39;.php&#39;;
}
class Client
{
  private $totalCost;
  private $hook;
  public function construct($goodsTotal)
  {
    $this->totalCost = $goodsTotal;
    $this->hook = $this->totalCost >= 200;
    $concrete = new Concrete();
    $concrete->templateMethod($this->totalCost, $this->hook);
  }
}
$worker = new Client(100);
$worker = new Client(200);

该Client演示了分别购买100块钱和200块钱的商品最后的费用,运行结果如下

您需要支付: 92.95元
您需要支付: 160元

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP接口隔离原则(ISP)使用案例解析

PHP依赖倒置案例详解

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn