`
iamxi
  • 浏览: 191554 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

学习:原型(Prototype)

阅读更多

很少见到,我都没遇到过,或是遇到过也没注意。

 

意图:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

 

结构:


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
分享到:
评论

相关推荐

    实验六:原型模式.rar

    在IT行业中,设计模式是一种被...总的来说,实验六“原型模式”是一个很好的学习和实践设计模式的机会,它能帮助开发者更好地理解和运用Java的克隆机制,以及在实际项目中如何有效地利用原型模式优化代码结构和性能。

    设计模式C++学习之原型模式(Prototype)

    本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...

    prototype::anchor:原型

    在标题“prototype::anchor:原型”中,“prototype”指的是JavaScript中的原型机制,“anchor”可能是指在原型链中作为起点的原型对象,通常是一个函数的prototype属性,这个属性定义了实例对象可以继承的方法和属性...

    深入学习JavaScript中的原型prototype

    javascript 是一种 prototype based programming 的语言, 而与我们通常的 class based programming 有很大 的区别,我列举重要的几点如下: 1.函数是first class object, 也就是说函数与对象具有相同的语言地位 2.没有...

    Prototype 开发者手册 PDF版.zip

    2. **对象扩展**:学习Prototype如何通过扩展JavaScript的原型链来增加新的属性和方法,如`Object.extend()`和`Object.observe()`等。 3. **DOM操作**:掌握Prototype提供的便捷DOM操作API,如`Element`和`$$`选择...

    prototype从入门到精通

    这个“prototype从入门到精通”的教程涵盖了从基础概念到高级特性的全面学习路径,旨在帮助开发者快速掌握并精通Prototype框架。 一、Prototype基础知识 1. **对象扩展**:Prototype的核心特性之一就是对...

    JavaScript中的prototype原型学习指南

    Function 类型有一个属性 prototype,直接翻译过来就是原型。这个属性就是一个指针,指向一个对象,这个对象包含一些属性和方法,这些属性和方法会被当前函数生成的所有实例(对象)所共享。 这句话根据前面所说的,...

    Prototype-1.6.0 中文版\英文版\Prototype.js

    1. **类与对象继承**:Prototype.js引入了基于原型的类系统,允许开发者创建类并实现继承。这使得JavaScript代码可以采用面向对象的方式编写,增强了代码的可读性和可维护性。 2. **DOM操作**:Prototype提供了强大...

    《prototype1.4完全攻略》

    《Prototype 1.4 完全攻略》是深入学习JavaScript编程框架Prototype的宝贵资源,尤其对于初学者和希望提升Web开发效率的专业人士来说至关重要。Prototype是JavaScript库的一个轻量级框架,它为JavaScript语言增加了...

    bo2014-prototype:原型代码 - 进行中

    在深入学习这个项目之前,你需要了解以下JavaScript原型相关的知识点: 1. **对象创建**:JavaScript提供了多种创建对象的方式,如字面量语法、new运算符与构造函数、Object.create()方法等,这些都与原型机制紧密...

    game-prototype_2:原型到共享

    在“game-prototype_2:原型到共享”这个项目中,我们看到一个专注于将游戏原型转化为可分享的形式,这通常意味着该原型不仅用于内部开发团队,还可能供外部测试者、合作伙伴或者社区成员进行试玩和反馈。 ...

    Prototype-website:原型监狱网站

    "Prototype-website:原型监狱网站"是一个用于设计和展示监狱管理系统的初步模型。在这个项目中,开发者使用HTML(超文本标记语言)构建了一个基础的网页结构,为用户提供一个交互式的预览体验。HTML是Web开发的基础...

    prototype中文帮助文档

    这个“Prototype中文帮助文档”是专为理解并熟练运用Prototype.js设计的资源,对于开发者来说,是一个不可或缺的学习和参考工具。 Prototype.js 的核心特性包括: 1. **对象扩展**:Prototype.js 扩展了...

    原型模式PPT文档

    1. **模式结构**:原型模式主要由两个角色构成——原型(Prototype)接口和具体原型(Concrete Prototype)。原型接口定义了克隆操作,而具体原型实现该接口,提供实际的克隆功能。 2. **工作原理**:首先,客户端...

    Bilapower-prototype:原型 Bilapower,非商业用途

    【标题】"Bilapower-prototype:原型 Bilapower,非商业用途"指的是一个名为Bilapower的原型项目,这个项目可能是为了研发、测试或演示特定功能而创建的,不适用于商业环境。通常,原型是软件或系统开发过程中的早期...

    prototype1.6手册

    在学习 Prototype 1.6 时,你可以参考提供的两个 CHM 文件,它们通常包含了详细的文档和示例代码。同时,`prototype.js` 文件是实际的库代码,通过阅读源码也能深入理解其工作原理。 总的来说,Prototype 1.6 手册...

    prototype.io:原型的Web版本(WIP)

    "prototype.io"是一个致力于创建Web原型的工具,尤其适用于那些正在开发中的项目(Work In Progress,简称WIP)。在这个场景中,我们主要关注的是JavaScript技术的应用,因为这是与该原型工具有关的主要标签。 ...

    Prototype中英文手册

    描述进一步细化了内容,包括"Prototype中文手册"和"Prototype英文手册",暗示我们有完整的用户指南和API参考,这将有助于学习和开发过程中查找具体功能和方法。"Prototype API"表明手册包含了库的所有函数、类和方法...

    serena prototype composer 2008实例

    8. **最佳实践**:通过实例,可以学习到在实际项目中应用 Serena Prototype Composer 的最佳实践,比如如何有效地组织项目结构,以及如何优化原型设计的效率。 9. **问题解决**:描述中提到的功能不完善,意味着在...

Global site tag (gtag.js) - Google Analytics