在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。
## 原型模式的定义与特点
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。
**原型模式就是clone就是内存拷贝,比new的好处是创建对象快速,适合大对象创建**
## 原型模式的应用场景
原型模式通常适用于以下场景。
* 对象之间相同或相似,即只是个别的几个属性不同的时候。
* 创建对象成本较大,例如初始化时间长,占用CPU太多,或者占用网络资源太多等,需要优化资源。
* 创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。
* 系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值。
```
/**
* PHP原型模式
* 先创建一个原型对象,然后通过clone原型对象来创建新的对象
* 这样可以避免类创建时重复的初始化操作。
* Class Prototype
*/
class Prototype
{
public function init()
{
//.....这里初始化工作 有200次循环复杂操作
}
public function run()
{
//执行操作
}
}
//创建原型对象并初始化
$prototype = new Prototype();
$prototype->init();
//clone 原型对象
$obj1 = clone $prototype;
$obj1->run();
//clone 原型对象
$obj2 = clone $prototype;
$obj2->run();
```
- 序言
- 从业感悟
- 常用名词
- HTML
- JS
- ES6新特性
- jquery和vue对比
- 彻底理解this
- JQuery添加自定义函数
- js的实现
- 原始值和引用值
- MYSQL
- 简介
- 术语
- 特点
- 范式
- 数据类型1
- 数据类型2
- 编码
- 权限管理
- 事务
- mvvc
- 引擎
- MyISAM与InnoDB区别
- 索引类型
- 锁
- 死锁
- 分层架构
- 执行计划
- join原理
- 高可用
- 日志类型
- 分库分表
- 中间件
- 服务器
- 操作系统
- 信号量 锁 队列
- PHP
- composer加载原理
- composer基础知识
- 自动加载函数
- composer加载代码
- composer 自动加载
- 内存管理
- PHP执行流程
- cgi,fastCgi,php-fpm
- HTTP
- 错误码
- 跨域请求
- 面试
- 安全
- HTTP劫持
- 设计模式
- 如何正确的使用设计模式
- 单例模式
- 原型模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 设计原则
- 算法
- PHP短标签