很少见到,我都没遇到过,或是遇到过也没注意。
意图:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构:
Prototype
——声明一个克隆自身的接口
ConcretePrototype
——实现一个克隆自身的操作
协作:
客户请求一个原型克隆自身。
示例代码:
public abstract class Prototype implements Cloneable {
public Prototype clone() {
try {
return (Prototype) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public abstract String getThing();
}
public class ConcretePrototype extends Prototype {
@Override
public String getThing() {
return "ConcretePrototype";
}
}
public class Client {
public static void main(String[] args) {
ConcretePrototype cp = new ConcretePrototype();
ConcretePrototype newCp = (ConcretePrototype) cp.clone();
System.out.println(newCp.getThing());
}
}
效果:
这个是真的不需要new来创建对象了,或者说每次去请求新对象的时候都是去拷贝一个原有的对象的副本。听说clone的效率比new高。
问题:
克隆时构造函数不会被调用。
深克隆和浅克隆问题,比如JAVA中一个对象中其成员属性也是对象,单纯的clone操作不会克隆,结果是对象是新的,可是里面的内容的引用地址还是指向原有的。为此需要遍历然后挨个clone。如果遇到不支持克隆的成员,那就无能为力了。
适用:
当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式;以及
• 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者
• 为了避免创建一个与产品类层次平行的工厂类层次时;或者
• 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们
可能比每次用合适的状态手工实例化该类更方便一些。
相关模式:
大量使用Composite和Decorator模式的设计通常可以从Prototype模式处获益。
- 大小: 18.7 KB
分享到:
相关推荐
在IT行业中,设计模式是一种被...总的来说,实验六“原型模式”是一个很好的学习和实践设计模式的机会,它能帮助开发者更好地理解和运用Java的克隆机制,以及在实际项目中如何有效地利用原型模式优化代码结构和性能。
本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...
在标题“prototype::anchor:原型”中,“prototype”指的是JavaScript中的原型机制,“anchor”可能是指在原型链中作为起点的原型对象,通常是一个函数的prototype属性,这个属性定义了实例对象可以继承的方法和属性...
javascript 是一种 prototype based programming 的语言, 而与我们通常的 class based programming 有很大 的区别,我列举重要的几点如下: 1.函数是first class object, 也就是说函数与对象具有相同的语言地位 2.没有...
2. **对象扩展**:学习Prototype如何通过扩展JavaScript的原型链来增加新的属性和方法,如`Object.extend()`和`Object.observe()`等。 3. **DOM操作**:掌握Prototype提供的便捷DOM操作API,如`Element`和`$$`选择...
这个“prototype从入门到精通”的教程涵盖了从基础概念到高级特性的全面学习路径,旨在帮助开发者快速掌握并精通Prototype框架。 一、Prototype基础知识 1. **对象扩展**:Prototype的核心特性之一就是对...
Function 类型有一个属性 prototype,直接翻译过来就是原型。这个属性就是一个指针,指向一个对象,这个对象包含一些属性和方法,这些属性和方法会被当前函数生成的所有实例(对象)所共享。 这句话根据前面所说的,...
1. **类与对象继承**:Prototype.js引入了基于原型的类系统,允许开发者创建类并实现继承。这使得JavaScript代码可以采用面向对象的方式编写,增强了代码的可读性和可维护性。 2. **DOM操作**:Prototype提供了强大...
《Prototype 1.4 完全攻略》是深入学习JavaScript编程框架Prototype的宝贵资源,尤其对于初学者和希望提升Web开发效率的专业人士来说至关重要。Prototype是JavaScript库的一个轻量级框架,它为JavaScript语言增加了...
在深入学习这个项目之前,你需要了解以下JavaScript原型相关的知识点: 1. **对象创建**:JavaScript提供了多种创建对象的方式,如字面量语法、new运算符与构造函数、Object.create()方法等,这些都与原型机制紧密...
在“game-prototype_2:原型到共享”这个项目中,我们看到一个专注于将游戏原型转化为可分享的形式,这通常意味着该原型不仅用于内部开发团队,还可能供外部测试者、合作伙伴或者社区成员进行试玩和反馈。 ...
"Prototype-website:原型监狱网站"是一个用于设计和展示监狱管理系统的初步模型。在这个项目中,开发者使用HTML(超文本标记语言)构建了一个基础的网页结构,为用户提供一个交互式的预览体验。HTML是Web开发的基础...
这个“Prototype中文帮助文档”是专为理解并熟练运用Prototype.js设计的资源,对于开发者来说,是一个不可或缺的学习和参考工具。 Prototype.js 的核心特性包括: 1. **对象扩展**:Prototype.js 扩展了...
1. **模式结构**:原型模式主要由两个角色构成——原型(Prototype)接口和具体原型(Concrete Prototype)。原型接口定义了克隆操作,而具体原型实现该接口,提供实际的克隆功能。 2. **工作原理**:首先,客户端...
【标题】"Bilapower-prototype:原型 Bilapower,非商业用途"指的是一个名为Bilapower的原型项目,这个项目可能是为了研发、测试或演示特定功能而创建的,不适用于商业环境。通常,原型是软件或系统开发过程中的早期...
在学习 Prototype 1.6 时,你可以参考提供的两个 CHM 文件,它们通常包含了详细的文档和示例代码。同时,`prototype.js` 文件是实际的库代码,通过阅读源码也能深入理解其工作原理。 总的来说,Prototype 1.6 手册...
"prototype.io"是一个致力于创建Web原型的工具,尤其适用于那些正在开发中的项目(Work In Progress,简称WIP)。在这个场景中,我们主要关注的是JavaScript技术的应用,因为这是与该原型工具有关的主要标签。 ...
描述进一步细化了内容,包括"Prototype中文手册"和"Prototype英文手册",暗示我们有完整的用户指南和API参考,这将有助于学习和开发过程中查找具体功能和方法。"Prototype API"表明手册包含了库的所有函数、类和方法...
8. **最佳实践**:通过实例,可以学习到在实际项目中应用 Serena Prototype Composer 的最佳实践,比如如何有效地组织项目结构,以及如何优化原型设计的效率。 9. **问题解决**:描述中提到的功能不完善,意味着在...