`
iamxi
  • 浏览: 188567 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    深入学习JavaScript中的原型prototype

    主要介绍了深入学习JavaScript中的原型prototype,是JavaScript入门学习中的基础知识,需要的朋友可以参考下

    原型模式(Prototype)

    原型模式的示例代码和文档,学习原型模式的参考资料。

    跟我学习javascript的prototype原型和原型链

    每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...

    实例讲解C++编程中对设计模式中的原型模式的使用

    原型模式的实现完整代码示例(code):原型模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)。 代码片断 1:Prototype.h //Prototype.h...

    【JavaScript源代码】怎样用JavaScript实现原型模式.docx

     prototype警告:学习了解原型模式前需先学习原型、原型链、prototype、__proto__、constructor等知识; 实现原型模式 ES5中的API:Object.create(prototype, optionalDescriptorObjects) Object.create()方法...

    typescript-prototype:TypeScript原型

    它是一部分,以学习如何编写标准代码和TDD的常用用法。 请参阅文档以及如何在上进行。并逐步查看此代码的开发 与 在 安装 该软件包不是自洽的:它需要安装 。 然后您可以通过github下载该软件包: $ git clone ...

    prototype.js

    prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。 --- 在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数就是一个对象(Function),函数对象都有一个子对象 ...

    学习php设计模式 php实现原型模式(prototype)

    抽象原型(Prototype)角色:声明一个克隆自身的接口 具体原型(Concrete Prototype)角色:实现一个克隆自身的操作 四、原型模式的优点和缺点 Prototype模式优点: 1、可以在运行时刻增加和删除产品 2、可以改变值以...

    JS学习笔记之原型链和利用原型实现继承详解

    本文实例讲述了JS学习笔记之原型链和利用原型实现继承。分享给大家供大家参考,具体如下: 原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的 实例对象中有__proto__,是...

    player-prototypes:JavaScript原型简介

    大纲外卖: 使用prototype属性构建javascript对象的“蓝图” 通过理解,以其他面向对象的语言学习“类” 使用“继承”概念设计模块目标听众: 初学者学习javascript或具有另一种面向对象语言的经验的开发人员,学习...

    Javascript 学习笔记之 对象篇(二) : 原型对象

    Javascript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承。尽管人们经常将此看做是 Javascript 的一个缺点,然而事实上,原型式继承比传统的类继承模型要更加强大。举个例子,在原型式继承顶端构建...

    JavaScript中的原型prototype属性使用详解

    主要介绍了JavaScript中的原型prototype属性使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下

    prototype1.7.js

     prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。  ---  在prototype.js中,prototype对象是实现面向对象的一个重要机制。  每个函数(Function)就是一个对象,函数对象都有一...

    javascript-prototype:Javascript 原型

    Javascript 原型 这个包包含一个脚本,其中包含用于获取选项和运行某些东西的主要功能。 它是一部分,以学习如何编写标准代码和TDD的常用用法。 使用逐步此代码的开发。 安装 该包是自洽的,但如果你想自己测试,你...

    prototype.js开发手册

    prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。 --- 在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数就是一个对象(Function),函数对象都有一个子对象 ...

    JavaScript中的prototype原型学习指南

    主要介绍了JavaScript中的prototype原型学习指南,包括原型链与原型继承等重要知识,需要的朋友可以参考下

    JavaScript你一定要搞懂的原型链

    内容概要:在 JavaScript 中,每个对象都有一个原型。当访问一个对象的属性或方法时,...这是一个可编辑的xmind文件,对原型链有清晰的勾画,不同的链用不同颜色进行了标识,内容一目了然,可以帮助快速学习原型链。

Global site tag (gtag.js) - Google Analytics