浅析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自定义函数收代码
Aug 01 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
php结合正则获取字符串中数字
Jun 19 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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文件中是否含有bom的函数
2012/05/31 PHP
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Python创建字典的八种方式
2019/02/27 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Python中常用的os操作汇总
2020/11/05 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
实习期自我鉴定
2013/10/11 职场文书
男方父母证婚词
2014/01/12 职场文书
优秀学生获奖感言
2014/02/15 职场文书
股票投资建议书
2014/05/19 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
Java基础-封装和继承
2021/07/02 Java/Android