浅析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 相关文章推荐
Snoopy类使用小例子
Apr 15 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
Laravel 前端资源配置教程
Oct 18 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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加MYSQL服务器
2006/10/09 PHP
PHP用户指南-cookies部分
2006/10/09 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
PHP静态成员变量
2017/02/14 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
django从后台返回html代码的实例
2020/03/11 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
2014年小学植树节活动方案
2014/03/02 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
南湾猴岛导游词
2015/02/09 职场文书
民事起诉书范本
2015/05/19 职场文书
热爱劳动主题班会
2015/08/14 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
flex弹性布局详解
2022/03/20 HTML / CSS