浅析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面向对象分析设计的经验原则
Sep 20 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
php传值和传引用的区别点总结
Nov 19 PHP
详解PHP用mb_string处理windows中文字符
May 26 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
微信小程序开发入门基础教程
2017/04/19 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
python中的字典使用分享
2016/07/31 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python计算日期之间的放假日期
2018/06/05 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
护士医德医风自我评价
2014/09/15 职场文书
老人节标语大全
2014/10/08 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书