PHP设计模式 原型模式(Prototype)
定义
和工厂模式类似,用来创建对象。但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建。
场景
大对象的创建。
优点
1、可以在运行时刻增加和删除产品
2、可以改变值或结构以指定新对象
3、减少子类的构造
4、用类动态配置应用
缺点
Prototype是的最主要的缺点就是每一个类必须包含一个克隆方法;
而且这个克隆方法需要对类的功能进行检测,这对于全新的类来说较容易,但对已有的类进行改造时将不是件容易的事情;
要点
1、构建一个原型对象
2、对其进行初始化
3、对原型对象进行克隆操作
代码示例
简单实现
<?php
/**
* PHP设计模式 原型模式(prototype)
* User: pyzn
* Date: 2016-03-22
* Time: 14:08
*/ /**
* Class Object
* 一个结构复杂的对象原型
*/
class Object
{
public function init()
{
//一些很占用系统资源的操作
} public function run()
{ } } //常规方式
$obj1 = new Object();
$obj1->init();
$obj1->run(); $obj2 = new Object();
$obj2->init();
$obj2->run(); //原型模式
$prototype = new Object();
$prototype->init(); $obj1 = clone $prototype;
$obj1->run(); $obj2 = clone $prototype;
$obj2->run();
复杂实现

/**
* PHP设计模式 原型模式(prototype)的复杂实现
* User: pyzn
* Date: 2016-03-22
* Time: 14:08
*/ /**
* Interface IPrototype
* 声明一个克隆自身的接口,对原型角色的抽象
*/
interface IPrototype
{
public function copy();
} class PrototypeObject implements IPrototype
{
private $name; public function __construct($name)
{
$this->name = $name;
} public function setName($name)
{
$this->name = $name;
} public function getName()
{
return $this->name;
} public function copy()
{
/*
* 浅copy
*/
//return clone $this; /*
* 深copy
*/
$serializeStr = serialize($this);
$cloneObj = unserialize($serializeStr); return $cloneObj;
}
} class Client
{
public static function main()
{
$prototype = new PrototypeObject("test"); $pro1 = $prototype->copy();
$pro2 = $prototype->copy(); $pro2->setName("test2"); var_dump($pro1);
var_dump($pro2);
}
} Client::main();
PHP设计模式 原型模式(Prototype)的更多相关文章
- [工作中的设计模式]原型模式prototype
一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ...
- C#设计模式——原型模式(Prototype Pattern)
一.概述 在软件开发中,经常会碰上某些对象,其创建的过程比较复杂,而且随着需求的变化,其创建过程也会发生剧烈的变化,但他们的接口却能比较稳定.对这类对象的创建,我们应该遵循依赖倒置原则,即抽象不应该依 ...
- 设计模式-原型模式(Prototype)
场景分析: 前面我们提到,交易对象Trade,还有继承他的债券交易BondTrade.期货交易FutureTrade. 现在有一个需求,需要提供方法将交易拆分成多笔小交易. 代码如下(如果没有clon ...
- 设计模式——原型模式(Prototype Pattern)
原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象. UML 图: 原型类: package com.cnblog.clarck; /** * 原型类 * * @author c ...
- 大话设计模式--原型模式 Prototype -- C++实现
1. 原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象... 注意: 拷贝的时候是浅拷贝 还是 深拷贝, 来考虑是否需要重写拷贝构造函数. 关键在于: virtual Pro ...
- 设计模式——原型模式(Prototype)
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.——DP UML类图 模式说明 如果把在一张纸上手写一篇简历的过程看成是类的实例化过程,那么通过原型模式创建对象的过程就是拿着这张纸到复印 ...
- 设计模式--原型模式Prototype(创建型)
一.原型模式 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.原型模式实现的关键就是实现Clone函数,还需要实现深拷贝. 二.UML类图 三.例子 //父类 class Resume ...
- 谈谈设计模式~原型模式(Prototype)
返回目录 原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例.被复制的实例就是我们所称的“原型”,这个原型是可定制的. 原型模式 ...
- Net设计模式实例之原型模式( Prototype Pattern)
一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...
随机推荐
- I2S
音频数据传输而制定: Inter—IC Sound : 单线 时钟和数据一条线,时分复用: 标准的I2S总线电缆是由3根串行导线组成的:1根是时分多路复用(简称TDM)数据线:1根是字选择线:1根是时 ...
- 修改u-boot的开机logo及显示过程【转】
本文转载自;http://blog.csdn.net/voice_shen/article/details/6789424 [ u-boot: Git://git.denx.de/u-boot.git ...
- sql server中like无法匹配下划线问题解决方案
在sql server的like中下划线类似于通配符%,所以无法使用like '%_%'来匹配下划线,可以通过以下两种办法实现匹配下划线 1.使用转义字符escape like '%\_%' esca ...
- java性能时间与空间消耗
Java性能时间与空间消耗 一.减少时间消耗 标准代码优化 (1) 将循环不变量的计算移出循环 例如:for (int i=0; i<size()*2; i++) { ... } ------& ...
- iOS自定义提示弹出框(类似UIAlertView)
菜鸟一枚,大神勿喷.自己在牛刀小试的时候,发现系统的UIAlertView有点不喜欢,然后就自己自定义了一个UIAlertView,基本上实现了系统的UIAlertView,可以根据项目的需求修改UI ...
- c#操作rabbitmq
今天将会介绍如果使用rabbitmq进行简单的消息入队,出队操作,因为本文演示的环境要用到上文中配置的环境,所以要运行本文sample,请先按上一篇中完成相应环境配置. 首先,我们下载 ...
- 6-7 adaboost分类器1
如何利用特征来区分目标,进行阈值判决.adaboost分类器它的优点在于前一个基本分类器分出的样本,在下一个分类器中会得到加强.加强后全体的样本那么再次进行整个训练.加强后的全体样本再次被用来训练下一 ...
- 关于cout输出精度问题
#include <iostream.h> #include <iomanip.h> void main(void) { cout.setf(ios::fixed); cout ...
- 2.27 MapReduce Shuffle过程如何在Job中进行设置
一.shuffle过程 总的来说: *分区 partitioner *排序 sort *copy (用户无法干涉) 拷贝 *分组 group 可设置 *压缩 compress *combiner ma ...
- 数据库连接 ADO,OLEDB,ODBC,DAO的区别 转载
http://blog.csdn.net/ithomer/article/details/6624684 ODBC(Open Database Connectivity,开放数据库互连) 1992年, ...