浅析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的一个登录的类 [推荐]
Mar 16 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
解析mysql 表中的碎片产生原因以及清理
Jun 22 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP回调函数简单用法示例
May 08 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
PHP7 错误处理机制修改
Mar 09 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
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
php实现可运算的验证码
2015/11/10 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
jstree的简单实例
2016/12/01 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
js实现点击烟花特效
2020/10/14 Javascript
python随机数分布random测试
2018/08/27 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Django发送邮件功能实例详解
2019/09/02 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
Ruby如何定义一个类
2012/10/08 面试题
幼儿教师考核制度
2014/01/25 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
小学优秀教师材料
2014/12/15 职场文书
校本课程教学计划
2015/01/19 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA