声明:本系列博客参考资料《大话设计模式》,作者程杰。

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。

在php中,类已经实现了原型模式,php有个魔术方法__clone()方法,会克隆出一个这样的对象。

看一下UML类图:

角色分析:

1.抽象原型,提供了一个克隆的接口

2.具体的原型,实现克隆的接口

具体的代码:

/**抽象原型类* Class Prototype*/
abstract class Prototype
{abstract function cloned();
}/**具体原型类* Class Plane*/
class Plane extends Prototype
{public $color;function Fly(){echo "飞机飞啊飞!<br/>";}function cloned(){return clone $this;}
}

客户端测试代码:

header("Content-Type:text/html;charset=utf-8");
//------------------------原型模式测试代码------------------
require_once "./Prototype/Prototype.php";$plane1=new Plane();
$plane1->color="Blue";$plane2=$plane1->cloned();$plane1->Fly();
$plane2->Fly();echo "plane1的颜色为:{$plane1->color}<br/>";
echo "plane2的颜色为:{$plane2->color}<br/>";

这里只是介绍一下原型模式的核心思想,其实在实际开发中直接clone即可。

欢迎关注我的视频课程,地址如下,谢谢。

PHP面向对象设计模式

PHP设计模式——原型模式相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  6. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  7. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  8. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  9. [设计模式]原型模式

    简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...

  10. Java设计模式——原型模式

    概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...

最新文章

  1. Chem. Sci. | SyntaLinker: 基于Transformer神经网络的片段连接生成器
  2. mysql中文乱码解决方案_关于MySQL中文乱码的完美解决方案
  3. 文凭-决定的人生成败?下
  4. 设置更改root密码(远程,本地)、连接mysql、mysql常用命令
  5. 定义,公理,定理,引理,推论,命题,推测,猜想
  6. ReactiveNative学习之Diff算法
  7. 五大板块(5)——字符串
  8. gRPC in ASP.NET Core 3.0 -- 前言
  9. db2 命令选项解释
  10. find 命令_除了 find,还有这些文件查找命令
  11. PHP运算符 - 对象的方法或者属性, =数组的元素值
  12. [转]华人总结“十个”出了国才能知道秘密!
  13. Verilog三段式状态机描述
  14. 我们为何要选择使用LINUX?--大家自己体会
  15. python Requests+正则表达式爬取猫眼电影top100
  16. c语言sqar是double,C语言怎么编写正弦波
  17. verilog 中的冒泡排序法
  18. 7条命令在docker中部署Mesos集群
  19. 2020.1.13 C语言学习 结构体+结构体数组+结构体指针
  20. 英特尔 NUC 豆子峡谷 安装ubantu 的总结

热门文章

  1. python3 redis长链接超时_Python3 连接Redis字符串和字节问题探究
  2. 数字化工厂的五大系统_工厂通过MES系统对车间设备数字化管理
  3. 三菱st语言编程实例_C语言编程实例39
  4. wp login.php 打不开,解决wordpress后台无法登录或显示空白的问题
  5. 如何使用Intellij IDEA工具导入SVN项目
  6. 蓝牙 查询码 android,android bluetooth UUID蓝牙查询表
  7. vb.net 模拟鼠标 失去焦点_孢子:EA最成功的神作,虽能“模拟万物”但却落得昙花一现...
  8. 空间数据挖掘主要方法
  9. Android NDK开发之 opencv for android 问题总结
  10. css3 flex布局九宫格,css3最全flex布局结构整理