PHP デザイン パターン プロトタイプ デザイン パターンの原則と使用法分析 PHP スキル

jacklove
リリース: 2023-04-01 20:04:01
オリジナル
1486 人が閲覧しました

この記事では、主に PHP デザイン パターンのプロトタイプ デザイン パターンを紹介し、プロトタイプ デザイン パターンの概念と原理を簡単に説明し、サンプルの形で PHP プロトタイプ デザイン パターンの定義と使用法を分析します。参照してください

この記事の例では、PHP デザイン パターンのプロトタイプ デザイン パターンの原理と使用法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

1. プロトタイプ デザイン パターンとは

#プロトタイプ デザイン パターンは、クローン技術を使用してコピーします。インスタンス化されたオブジェクト。新しいオブジェクトはプロトタイプ インスタンスをコピーすることによって作成されます。プロトタイピング デザイン パターンの目的は、クローン作成を使用してオブジェクトのインスタンス化の

オーバーヘッドを削減することです。

プロトタイプ設計パターンでは、Client クラスは不可欠な部分です。

PHP には組み込みのクローン作成メソッドがあり、__clone()これはデザイン モードで使用できますが、clone キーワードを使用して直接アクセスすることはできません。クローン作成ではコンストラクターは開始されません。

2. プロトタイプ デザイン パターンを使用する場合

プロジェクトでプロトタイプ オブジェクトの複数のインスタンスを作成する必要がある場合は、プロトタイプ デザイン パターンを使用できます。

#3. プロトタイピング デザイン パターンの例

これは、現代の企業組織の例です:

<?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();
?>
ログイン後にコピー

実行結果:

テス・スミス

セールス
ts101-1234
ジェイコブ・ジョーンズ
プロモーション
jj101-2234
リッキー・ロドリゲス
オペレーション
rr203-5634
オリビア・ペレス
デジタルアートワーク
op302-1278
ジョン・ジャクソン
プログラミング
jj301-1454

# #興味があるかもしれない記事:

laravel で SMS 確認コードを実装する方法 PHP の例


PHP acceptMail は電子メールを実装しますfunction php 例


PHP 共有画像の生成方法 PHP スキル


# #

以上がPHP デザイン パターン プロトタイプ デザイン パターンの原則と使用法分析 PHP スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート