在有些系統中,存在大量相同或相似對象的創建問題,如果用傳統的構造函數來創建對象,會比較復雜且耗時耗資源,用原型模式生成對象就很高效,就像孫悟空拔下猴毛輕輕一吹就變出很多孫悟空一樣簡單。
## 原型模式的定義與特點
原型(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短標簽