原型模式
原型模式
原型模式Prototype Pattern
用原型实例指向创建对象的类,使用于创建新的对象的类的共享原型的属性与方法。
描述#
在JavaScript
中可以利用其特有的原型继承特性去实现创建对象的方式,也就是创建的一个对象作为另外一个对象的prototype
属性值,原型对象本身就是有效地利用了每个构造器创建的对象,其将实例之间相同的属性和方法提取成共有的属性和方法,而这些属性与方法都可以被实例共享。
在Java
中通常是用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,即通过一个抽象类实现Cloneable
接口以及重写Object
类中的clone
方法,之后使用子类继承此抽象类并在一个缓存类中使用集合类例如HashTable
进行存储,当需要类时便可以找到HashTable
中该类通过clone
实现得到一个新的子类,使用原型模式创建对象比直接new
一个对象在性能上要好的多,因为Object
类的clone
方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单,所以在需要重复地创建相似对象时可以考虑使用原型模式,此外深拷贝与浅拷贝问题中,会发生深拷贝的有Java
中的8
种基本类型以及他们的封装类型以及String
类型,其余的都是浅拷贝。
优点#
- 提高性能。
- 避免构造函数的约束。
缺点#
- 在原型中需要对所有类的功能进行考虑。
- 创建对象不会调用类的构造方法。
实现#
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
每日一题#
https://github.com/WindrunnerMax/EveryDay
参考#
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理