前几天介绍的都是属於Creational Patter,今天要来介绍最後一个位,也就是Prototype!
假设今天有个复杂的物件,你想要创建它的分身,就必须先创一个同一类别的新物件,然後再遍历(go through)此类的所有属性以後才能复制到新的物件。不过可能会碰到一个问题,就是并不是所有的属性都会是公开的,有可能是私有的,所以不能端看物件的外表而了解其内在。
当遇到这种情况以後,即使物件本身没有私有的属性,但只要需要创建分身,就得写一大串的程序码将要创建的物件初始化,而这些程序码又是重复的,会造成程序码显得又臭又长。
倘若使用Prototype,所有支援克隆(clone)的物件都会有个共同的介面,而克隆的方法都会在所有的类别实现,此方法会创建一个当前类别的物件,并将旧物件所有的属性复制到新的物件上,即使是私有的属性也会移并复制过去。
abstract class Prototype {
Type field;
Prototype(Prototype prototype) {
this.field = prototype.field;
}
public abstract Prototype clone();
}
class ConcretePrototype extends Prototype {
Type field1;
ConcretePrototype(ConcretePrototype prototype) {
// fields defined in the parent class.
super(prototype);
this.field1 = prototype.field1;
}
public Prototype clone() {
return new ConcretePrototype(this);
}
}
Prototype运行的方式其实很简单,就是当你创建一个物件,并且初始化完,尔後需要再一个相同的物件时,只需要克隆一原型就可以了,不用再写重复的程序码将物件初始化,而且客户端只须要有所有支援克隆方法物件的共同介面,并不需要去耦合到具体类别就能够克隆物件,非常方便!
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
<<: Day.18 「从函式物件认识 作用域 与 提升!」 —— JavaScript 函式(Function) & 作用域(Scope) & 提升(Hoisting)
>>: 追求JS小姊姊系列 Day12 -- 还是没躲掉,方函式登场
And So It Is. 就这拉! 我们明年见 :) 等有 FU 再来补三八的话 又或着 就这样...
进入到铁人赛第 20 天。在摸索 20 天,我大概找到一种「每天花 90 分钟看书并摘要点什麽」的节...
当专案中的阶层变复杂,state和props变的很多,资料在多层component之间的传递也越来越...
上篇完成了巢状路由的设置之後,紧接着新需求又出现了!接续会员後台的收藏纪录页面,我们要进一步让收藏的...
今天谈到最常用的函式 function 一般来说,函式的定义方式如图中所示 name: 代表函式的名...