php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog
10
8
Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李轩Lane
原型模式提取重复功能,避免了程序员喜欢复制粘贴的坏习惯。设计模式中的原型模式就是,用原型实例指定创建对象的重力,通过拷贝这些原型来创建新的对象从一个对象再创建另外一个可定制的对象,而且不需要知道创建的任何细节。
浅复制 VS 深复制:
浅复制是对数字,字符串等类型进行传值复制,而对对象来讲是引用复制,即只是对内存地址进行赋值而不是新建一个对象的变量。在浅复制中,对一个对象的属性改变,另一个对象的该属性也会被改变,类比于C语言的指针,PHP在调用方法时&$var的传递。
以PHP为代码环境。
//家庭类
class Home{
public $money;
public function __construct($money){
$this->money = $money;
}
}
//家庭成员类
class member{
public $id;
public $name;
public $obj;
public function __construct($id, $name, Home $obj){
$this->setId($id);
$this->setName($name);
$this->obj = $obj;
}
public function setId($id){
$this->id = $id;
}
public function setName($name){
$this->name = $name;
}
public function display(){
echo 'ID为' . $this->id . ',名称为' . $this->name . ',资产为' . $this->obj->money . '
';
}
public function __clone(){
//深度复制(克隆),因为克隆只能克隆数字,字符串等,对对象变量是引用传值。
$this->obj = clone $this->obj;
}
}
//客户端/接口
$obj1 = new member(1, '小轩', new Home('10000'));
$obj1->display();
$obj2 = clone $obj1;
$obj2->setId(2);
$obj2->setName('小玮');
$obj2->obj->money = 2000;
$obj2->display();
//根据这句输出可以看到,对象1和对象2值是不一样的,删掉上面的注释部分再看,又是一样的了,这就是深复制和浅复制。
$obj1->display();
?>
php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog相关推荐
- 原型模式的应用场景_前端常用设计模式
求关注 前端常见的设计模式主要有以下几种:1. 单例模式2. 工厂模式3. 策略模式4. 代理模式5. 观察者模式6. 模块模式7. 构造函数模式8. 混合模式 单例模式 这种设计模式的思想是确保一个 ...
- getinstance方法详解_二、设计模式总览及工厂模式详解
二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...
- java模式设计视频教程_全新JAVA设计模式详解视频教程 完整版课程
├─0-设计模式前言.mp4; D" g8 v: S4 L* d2 y* U j ; N5 }! y5 r/ k3 B5 ]+ f% [: x├─1-strategy_策略模式-第二模式. ...
- 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...
在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...
- java 外部接口调用 设计模式_《Java设计模式》之接口模式
-----------模式是思想的体现,而非具体的实现. 抽象的讲,类的接口是类允许其他类对象访问的方法与字段集.接口通常代表一种承诺,即方法需要实现接口方法名表示的操作,遵循代码注释和其他文档说明, ...
- getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...
文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...
- 《设计模式之禅》读书笔记之C#版-创建类模式
备注:由于读的电子书版本是pdf的,影印都有些看不清楚.所有练习代码都单独放到了GitHub上方便以后查看. https://github.com/yuhezhangyanru/DesignPatte ...
- 设计模式01 UML图,软件设计原则,创建型模式
概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...
- 设计模式(一):单例、工厂、原型、建造者、适配器
前言:本文为原创 若有错误欢迎评论! 一.UML基本介绍 1.概念: 统一建模语言 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系 2.类之间的关系: 依赖(所有关系的本质):1) ...
最新文章
- C#中Socket多线程编程实例
- httpclient3.1的多线程处理
- css学习入门篇(1)
- 2008年清华大学计算机研究生机试真题
- 20145207 《Java程序设计》第4周学习总结
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState
- mysql常用语句和函数
- LCM在Kernel中的代码分析
- 工作196:注意接收数据的格式
- web----tcp三次握手
- java当月最后一天_Java日期循环,Java获取当月的第一天和最后一天 | 学步园
- JAVA 面试高频提问知识点之:SET、LIST 和 MAP 的区别
- Redis的安装(windows)
- java cookie 跨域共享_跨域共享cookie
- [软件人生]大白话讲述了近两百年中美之间的历史关系及tpp是什么
- 【已解决】平板作为外接显示屏-Duet
- 刘夏真的简历中国科学院计算机所,计算所智能计算机研究中心党支部正式成立...
- mdx词典包_欧路词典—使用体验
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛
- 电影天堂React Native客户端V2.0
热门文章
- 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]
- php负载均衡原理_负载均衡的原理(通俗理解)
- tensorflow分类的loss函数_tensorflow 分类损失函数使用小记
- ubuntu 安装java jdk_「ubuntu安装jdk」Ubuntu安装jdk8的两种方式 - seo实验室
- dokcer mysql修改编码_默认支持utf8编码的mysql docker镜像
- voc2007数据集_【目标检测数据集】PASCAL VOC制作
- Scala变量和常用数据类型
- Nginx(二):安装、配置、常用命令
- easyui,layui和 vuejs 有什么区别
- 谈谈重载(overload)覆盖(override)与隐藏