PHP设计模式之原型设计模式原理与用法分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-12 15:14:38 浏览: 评论:0
这篇文章主要介绍了PHP设计模式之原型设计模式,简单描述了原型设计模式的概念、原理并结合实例形式分析了php原型设计模式的定义与使用方法,需要的朋友可以参考下
本文实例讲述了PHP设计模式之原型设计模式原理与用法。分享给大家供大家参考,具体如下:
一、什么是原型设计模式
原型设计模式使用一种克隆技术来复制实例化的对象,新对象是通过复制原型实例创建的。原型设计模式的目的是通过使用克隆以减少实例化对象的开销。
在原型设计模式中,Client类是不可缺少的一部分。
PHP有一个内置的克隆方法__clone()可以在设计模式中使用,但是不能直接访问,使用clone关键字即可。克隆不会启动构造函数。
二、什么时候使用原型设计模式
如果一个项目要求你创建某个原型对象的多个实例,就可以使用原型设计模式。
三、原型设计模式实例
这里以现代企业组织为例:
- <?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();
- ?>
运行结果:
- 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
Tags: PHP设计模式 PHP模式原理
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之适配器模式定义与用法详解(2021-09-06)
- ·PHP设计模式之原型模式定义与用法详解(2021-09-06)
- ·PHP设计模式之工厂模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)