ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン プロトタイプ デザイン パターンの原則と使用法分析 PHP スキル
この記事では、主に 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() . '<br />'; echo $employee->getDept() . '<br />'; echo $employee->getId() . '<br />'; } } $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 サイトの他の関連記事を参照してください。