浅析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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
Oct 24 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
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
金士达面试非笔试
2012/03/14 面试题
四年的大学生生活自我评价
2013/12/09 职场文书
老师给学生的表扬信
2014/01/17 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
销售员岗位职责范本
2015/04/11 职场文书
公司保密管理制度
2015/08/04 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书