前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原型模式

原型模式

作者头像
WindrunnerMax
发布2020-09-17 17:16:42
2500
发布2020-09-17 17:16:42
举报
文章被收录于专栏:Czy‘s BlogCzy‘s Blog

原型模式

原型模式Prototype Pattern用原型实例指向创建对象的类,使用于创建新的对象的类的共享原型的属性与方法。

描述

JavaScript中可以利用其特有的原型继承特性去实现创建对象的方式,也就是创建的一个对象作为另外一个对象的prototype属性值,原型对象本身就是有效地利用了每个构造器创建的对象,其将实例之间相同的属性和方法提取成共有的属性和方法,而这些属性与方法都可以被实例共享。 在Java中通常是用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,即通过一个抽象类实现Cloneable接口以及重写Object类中的clone方法,之后使用子类继承此抽象类并在一个缓存类中使用集合类例如HashTable进行存储,当需要类时便可以找到HashTable中该类通过clone实现得到一个新的子类,使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单,所以在需要重复地创建相似对象时可以考虑使用原型模式,此外深拷贝与浅拷贝问题中,会发生深拷贝的有Java中的8种基本类型以及他们的封装类型以及String类型,其余的都是浅拷贝。

优点

  • 提高性能。
  • 避免构造函数的约束。

缺点

  • 在原型中需要对所有类的功能进行考虑。
  • 创建对象不会调用类的构造方法。

实现

代码语言:javascript
复制
var Shape = {
    name : null,
    say: function(){
        console.log(this.name);
    }
}

var rectangle = Object.create(Shape);
rectangle.name = "Rectangle";
rectangle.say(); // Rectangle

var square = Object.create(Shape);
square.name = "Square";
square.say(); // Square

var circle = Object.create(Shape);
circle.name = "Circle";
circle.say(); // Circle

每日一题

代码语言:javascript
复制
https://github.com/WindrunnerMax/EveryDay

参考

代码语言:javascript
复制
https://segmentfault.com/a/1190000012427846
https://www.runoob.com/design-pattern/prototype-pattern.html
https://wiki.jikexueyuan.com/project/java-design-pattern/prototype-pattern.html
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原型模式
    • 描述
      • 优点
      • 缺点
    • 实现
      • 每日一题
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档