Day37. 原型模式

本文同步更新於blog

Prototype Pattern

当创建实例的过程很昂贵或复杂时,透过拷贝这些原型来建立新的实例。


原型模式中会将类别分为两类:
分别是原型介面 (Prototype)具体原型类别 (Concrete Prototype)

透过原型介面,我们可以知道该实例能拷贝 (clone),复制出自己的实例。


其中拷贝又可分为两种:
分别是浅复制 (Shallow Copy)深复制 (Deep Copy)

两者的差别在於,当原型类别的属性为参考类型 (references) 时,
浅复制会指向与实例一样的位址,不会重新创建属性
深复制则会重新创建属性

这意味着,当使用浅复制时,
修改参考类型的属性会一并修改到原本实例。


优点
可以直接拷贝实例,省去创建的麻烦。
也提供了一个不使用继承 (extend) 来面对复杂实例的方式。

缺点
当架构较为复杂时,深复制可能会不好实作。


与其他模式的比较:

[抽象工厂模式]:
抽象工厂模式,透过定义产品族的概念,处理复杂的创建。
原型模式则是想利用拷贝的概念,来处理复杂的创建。

[单例模式]:
单例模式保证同一时间存在一个实例
原型模式则是复制出一个实例。

ʕ •ᴥ•ʔ:在PHP中,由於有魔术方法__clone()的存在,
我们可以不定义原型介面,直接使用clone()。


<<:  拿 ml5 来练习 如何载入别人的情绪给自己的电脑 (四)

>>:  JS 作用域 DAY47

徵求DDoS防护系统测试

#DDoS防护系统测试 徵求大中小企业有被DDoS攻击的经验,传统FW防护已没法应付的情境。 On-...

Day07 NAT 类型

NAT 网路位址转换(英语:Network Address Translation,缩写:NAT)是...

JavaScript Prototype (原型)

原型 Prototype 与 原型链 Prototype Chain JavaScript 每一个物...

Day.17 Graph-DFS

DFS是简写,全名是Depth-First-Search(深度优先搜寻演算法) DFS是一种搜寻的算...

AE骇客萤幕打字效果2-Day11

接续昨天的练习:https://ithelp.ithome.com.tw/articles/1026...