浅析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 04 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
php while循环控制的简单实例
May 30 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 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
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js有序数组的连接问题
2013/10/01 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
js实现返回顶部效果
2017/03/10 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
Python实现微信机器人的方法
2019/09/06 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
乡下人家教学反思
2014/02/01 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL