Maison  >  Article  >  développement back-end  >  Principe du modèle de conception du prototype de modèle de conception PHP et analyse de l'utilisation Compétences PHP

Principe du modèle de conception du prototype de modèle de conception PHP et analyse de l'utilisation Compétences PHP

jacklove
jackloveoriginal
2018-06-26 17:18:131458parcourir

Cet article présente principalement le modèle de conception de prototype du modèle de conception PHP.Il décrit brièvement le concept et le principe du modèle de conception de prototype et analyse la définition et l'utilisation du modèle de conception de prototype PHP sous forme d'exemples. référez-vous à lui

Les exemples de cet article décrivent les principes et l'utilisation du modèle de conception de prototype des modèles de conception PHP. Partagez-le avec tout le monde pour référence, comme suit :

1. Qu'est-ce que le modèle de conception de prototypage

Le modèle de conception de prototypage utilise une technologie de clonage pour copier des objets instanciés. De nouveaux objets sont créés en copiant des instances prototypes. Le but du modèle de conception de prototypage est de réduire

la surcharge liée à l'instanciation des objets grâce à l'utilisation du clonage.

Dans le modèle de conception de prototypage, la classe Client est un élément indispensable.

PHP a une méthode de clonage intégrée __clone() qui peut être utilisée en mode conception, mais elle n'est pas accessible directement, utilisez simplement le mot-clé clone. Le clonage ne démarre pas le constructeur.

2. Quand utiliser le modèle de conception de prototypage

Si un projet vous oblige à créer plusieurs instances d'un objet prototype, vous pouvez utiliser le modèle de conception de prototypage.

3. Exemples de modèles de conception de prototypage

Voici un exemple d'organisation d'entreprise moderne :

<?php
/**
*  原型设计模式
*        以现代企业组织为例
**/
//部门抽象类
abstract class IAcmePrototype
{
  protected $id;   //员工ID号
  protected $name;  //员工名字
  protected $dept;  //员工部门
  //克隆方法
  abstract function __clone();
  //员工部门设置方法
  abstract function setDept($orgCode);
  //员工部门获取方法
  public function getDept()
  {
    return $this->dept;
  }
  //员工ID号设置方法
  public function setId($id)
  {
    $this->id = $id;
  }
  //员工ID号获取方法
  public function getId()
  {
    return $this->id;
  }
  //员工名字设置方法
  public function setName($name)
  {
    $this->name = $name;
  }
  //员工名字获取方法
  public function getName()
  {
    return $this->name;
  }
}
//市场部类
class Marketing extends IAcmePrototype
{
  const UNIT = "Marketing";  //标识
  //市场部门类别
  private $sales = "sales";
  private $promotion = "promotion";
  private $strategic = "strategic planning";
  //克隆函数
  function __clone()
  {
  }
  //部门设置函数
  public function setDept($orgCode)
  {
    switch($orgCode)
    {
      case 101:
          $this->dept = $this->sales;
          break;
      case 102:
          $this->dept = $this->promotion;
          break;
      case 103:
          $this->dept = $this->strategic;
          break;
      default:
          $this->dept = "Unrecognized Marketing";
    }
  }
}
//管理部类
class Management extends IAcmePrototype
{
  const UNIT = "Management";
  private $research = "research";
  private $plan = "planning";
  private $operations = "operations";
  function __clone()
  {
  }
  public function setDept($orgCode)
  {
    switch($orgCode)
    {
      case 201:
          $this->dept = $this->research;
          break;
      case 202:
          $this->dept = $this->plan;
          break;
      case 203:
          $this->dept = $this->operations;
          break;
      default:
          $this->dept = "Unrecognized Marketing";
    }
  }
}
//工厂部类
class Engineering extends IAcmePrototype
{
  const UNIT = "Engineering";
  private $development = "programming";
  private $design = "digital artwork";
  private $sysAd = "system administration";
  function __clone()
  {
  }
  public function setDept($orgCode)
  {
    switch($orgCode)
    {
      case 301:
          $this->dept = $this->development;
          break;
      case 302:
          $this->dept = $this->design;
          break;
      case 303:
          $this->dept = $this->sysAd;
          break;
      default:
          $this->dept = "Unrecognized Marketing";
    }
  }
}
//客户类
class Client
{
  private $market;  //市场部类实例
  private $manage;  //管理部类实例
  private $engineer; //工厂部类实例
  //构造函数
  public function __construct()
  {
    $this->makeConProto();
    //市场部类实例克隆
    $Tess = clone $this->market;
    $this->setEmployee($Tess,"Tess Smith",101,"ts101-1234");
    $this->showEmployee($Tess);
    $Jacob = clone $this->market;
    $this->setEmployee($Jacob,"Jacob Jones",102,"jj101-2234");
    $this->showEmployee($Jacob);
    //管理部类实例克隆
    $Ricky = clone $this->manage;
    $this->setEmployee($Ricky,"Ricky Rodrigues",203,"rr203-5634");
    $this->showEmployee($Ricky);
    //工程部类实例克隆
    $Olivia = clone $this->engineer;
    $this->setEmployee($Olivia,"Olivia perez",302,"op302-1278");
    $this->showEmployee($Olivia);
    $John = clone $this->engineer;
    $this->setEmployee($John,"John Jackson",301,"jj301-1454");
    $this->showEmployee($John);
  }
  //实例化部门对象
  private function makeConProto()
  {
    $this->market = new Marketing();
    $this->manage = new Management();
    $this->engineer = new Engineering();
  }
  //员工信息设置方法
  private function setEmployee(IAcmePrototype $employee,$name,$dept,$id)
  {
    $employee->setName($name);
    $employee->setDept($dept);
    $employee->setId($id);
  }
  //员工信息显示方法
  private function showEmployee(IAcmePrototype $employee)
  {
    echo $employee->getName() . &#39;<br />&#39;;
    echo $employee->getDept() . &#39;<br />&#39;;
    echo $employee->getId() . &#39;<br />&#39;;
  }
}
$client = new Client();
?>

Résultats d'exécution :

Tess Smith
ventes
ts101-1234
Jacob Jones
promotion
jj101-2234
Ricky Rodrigues
opérations
rr203-5634
Olivia perez
illustration numérique
op302-1278
John Jackson
programmation
jj301-1454

Articles qui pourraient vous intéresser :

Comment implémenter le code de vérification SMS dans l'exemple PHP de Laravel

Implémentations de PHP recevoirMail réception d'e-mails Exemple de fonction php

Méthode de génération de la technique php d'image partagée 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