浅析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 相关文章推荐
pw的一个放后门的方法分析
Oct 08 PHP
php中iconv函数使用方法
May 24 PHP
PHP运行模式的深入理解
Jun 03 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
php异常处理使用示例
2014/02/25 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
python异步任务队列示例
2014/04/01 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
python统计日志ip访问数的方法
2015/07/06 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
pandas数据处理之绘图的实现
2020/06/15 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
综合测评个人总结
2015/03/03 职场文书