浅析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分页显示制作详细讲解
Nov 19 PHP
php xml实例 留言本
Mar 20 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
php获取新浪微博数据API实例
Nov 12 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 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
THINKPHP内容分页代码分享
2015/01/14 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python爬虫面试宝典(常见问题)
2018/03/02 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
How TDD works
2012/09/30 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
药学专业大学生个人的自我评价
2013/11/04 职场文书
全陪导游欢迎词
2014/01/17 职场文书
我的中国梦口号
2014/06/16 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers