本文实例讲述了PHP设计模式之原型设计模式原理与用法。分享给大家供大家参考,具体如下:
一、什么是原型设计模式
原型设计模式使用一种克隆技术来复制实例化的对象,新对象是通过复制原型实例创建的。原型设计模式的目的是通过使用克隆以减少
实例化对象的开销。
在原型设计模式中,Client类是不可缺少的一部分。
PHP有一个内置的克隆方法__clone()可以在设计模式中使用,但是不能直接访问,使用clone关键字即可。克隆不会启动html' target='_blank'>构造函数。
二、什么时候使用原型设计模式
如果一个项目要求你创建某个原型对象的多个实例,就可以使用原型设计模式。
三、原型设计模式实例
这里以现代企业组织为例:
?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- //员工名字设置方法 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();?
运行结果:
Tess Smith
sales
ts101-1234
Jacob Jones
promotion
jj101-2234
Ricky Rodrigues
operations
rr203-5634
Olivia perez
digital artwork
op302-1278
John Jackson
programming
jj301-1454
laravel中短信发送验证码的实现方法php实例
PHP receiveMail实现收邮件功能php实例
PHP分享图片的生成方法php技巧
以上就是PHP设计模式之原型设计模式原理与用法分析php技巧的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答