浅析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中的一个中文字符串截取函数
Feb 14 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
Yii框架form表单用法实例
Dec 04 PHP
PHP生成条形图的方法
Dec 10 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
php获取远程文件内容的函数
Nov 02 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
thinkphp实现附件上传功能
May 26 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP仿盗链代码
2012/06/03 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
js 操作符汇总
2014/11/08 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python面向对象特殊成员
2017/04/24 Python
python 列表降维的实例讲解
2018/06/28 Python
python实现统计代码行数的小工具
2019/09/19 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
学生个人的自我评价分享
2013/11/05 职场文书
教师年度个人总结
2015/02/11 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Python实现仓库管理系统
2022/05/30 Python