Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwurfsmuster-Prototyp, Entwurfsmuster-Prinzip und PHP-Kenntnisse zur Nutzungsanalyse

PHP-Entwurfsmuster-Prototyp, Entwurfsmuster-Prinzip und PHP-Kenntnisse zur Nutzungsanalyse

jacklove
jackloveOriginal
2018-06-26 17:18:131494Durchsuche

Dieser Artikel stellt hauptsächlich das Prototyp-Entwurfsmuster des PHP-Entwurfsmusters vor. Er beschreibt kurz das Konzept und das Prinzip des Prototyp-Entwurfsmusters und analysiert die Definition und Verwendung des PHP-Prototyp-Entwurfsmusters in Form von Beispielen siehe es

Die Beispiele in diesem Artikel beschreiben die Prinzipien und die Verwendung des Prototyp-Entwurfsmusters von PHP-Entwurfsmustern. Teilen Sie es wie folgt mit allen als Referenz:

1. Was ist das Prototyping-Entwurfsmuster

Das Prototyping-Entwurfsmuster verwendet eine Klontechnologie, um instanziierte Objekte zu kopieren. Neue Objekte werden durch das Kopieren von Prototypinstanzen erstellt. Der Zweck des Prototyping-Entwurfsmusters besteht darin,

den Aufwand für die Instanziierung von Objekten durch Klonen zu reduzieren.

Im Prototyping-Entwurfsmuster ist die Client-Klasse ein unverzichtbarer Bestandteil.

PHP verfügt über eine integrierte Klonmethode __clone(), die im Designmodus verwendet werden kann, auf die jedoch nicht direkt zugegriffen werden kann. Verwenden Sie einfach das Schlüsselwort clone. Durch das Klonen wird der Konstruktor nicht gestartet.

2. Wann Sie das Prototyping-Entwurfsmuster verwenden sollten

Wenn Sie für ein Projekt mehrere Instanzen eines Prototypobjekts erstellen müssen, können Sie das Prototyping-Entwurfsmuster verwenden.

3. Beispiele für Prototyping-Designmuster

Hier ist eine moderne Unternehmensorganisation als Beispiel:

<?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();
?>

Betriebsergebnisse:

Tess Smith
Verkauf
ts101-1234
Jacob Jones
Promotion
jj101-2234
Ricky Rodrigues
Operationen
rr203-5634
Olivia perez
digitale Kunstwerke
op302-1278
John Jackson
Programmierung
jj301-1454

Artikel, die Sie interessieren könnten:

PHP-Beispiel für das Senden eines Bestätigungscodes per SMS in Laravel

PHP-ReceiveMail-Implementierungen PHP-Beispiel für die E-Mail-Funktion >

Das obige ist der detaillierte Inhalt vonPHP-Entwurfsmuster-Prototyp, Entwurfsmuster-Prinzip und PHP-Kenntnisse zur Nutzungsanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn