浅析php原型模式


Posted in PHP onNovember 25, 2014

原型模式:

用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
应用场景: 类的资源非常多、性能和安全要求,一般和工厂方法结合使用。

<?php

/**

 * 原型模式

 */

//声明一个克隆自身的接口

interface Prototype {

    function copy(); 

}   

//产品要实现克隆自身的操作

class Student implements Prototype {

       //简单起见,这里没有使用get set

    public $school;

    public $major;

       public $name;

       public function __construct($school, $major, $name) {

              $this->school = $school;

              $this->major = $major;

              $this->name = $name;

       }

       public function printInfo() {

              printf("%s,%s,%sn", $this->school, $this->major, $this->name);

       }

    public function copy() {

           return clone $this;

    }

}

$stu1 = new Student('清华大学', '计算机', '张三');

$stu1->printInfo();

$stu2 = $stu1->copy();

$stu2->name = '李四';

$stu2->printInfo();

?>

这里可以看到,如果类的成员变量非常多,如果由外部创建多个新对象再一个个赋值,则效率不高代码冗余也容易出错,通过原型拷贝复制自身再进行微小修改就是另一个新对象了。

设计模式的第一部分,创建型模式就总结完了。下面还有两部分结构型设计模式和行为型设计模式稍后继续。

PHP 相关文章推荐
配置最新的PHP加MYSQL服务器
Oct 09 PHP
php str_pad 函数使用详解
Jan 13 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php共享内存段示例分享
Jan 20 PHP
php实现计数器方法小结
Jan 05 PHP
Symfony2创建页面实例详解
Mar 18 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
浅析php创建者模式
Nov 25 #PHP
浅析php工厂模式
Nov 25 #PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 #PHP
浅析php单例模式
Nov 25 #PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 #PHP
php字符串截取函数用法分析
Nov 25 #PHP
浅谈ThinkPHP的URL重写
Nov 25 #PHP
You might like
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
mysql5写入和读出乱码解决
2006/11/25 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
JS实现烟花爆炸效果
2020/03/10 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
CentOS7下python3.7.0安装教程
2018/07/30 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Python关于反射的实例代码分享
2020/02/20 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
灰雀教学反思
2014/04/28 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
经济类毕业生求职信
2014/06/26 职场文书
好的促销活动方案
2014/08/21 职场文书
校园安全广播稿范文
2014/09/25 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书