很少见到,我都没遇到过,或是遇到过也没注意。
意图:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构:
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)
主要介绍了深入学习JavaScript中的原型prototype,是JavaScript入门学习中的基础知识,需要的朋友可以参考下
原型模式的示例代码和文档,学习原型模式的参考资料。
每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...
原型模式的实现完整代码示例(code):原型模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)。 代码片断 1:Prototype.h //Prototype.h...
prototype警告:学习了解原型模式前需先学习原型、原型链、prototype、__proto__、constructor等知识; 实现原型模式 ES5中的API:Object.create(prototype, optionalDescriptorObjects) Object.create()方法...
它是一部分,以学习如何编写标准代码和TDD的常用用法。 请参阅文档以及如何在上进行。并逐步查看此代码的开发 与 在 安装 该软件包不是自洽的:它需要安装 。 然后您可以通过github下载该软件包: $ git clone ...
prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。 --- 在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数就是一个对象(Function),函数对象都有一个子对象 ...
抽象原型(Prototype)角色:声明一个克隆自身的接口 具体原型(Concrete Prototype)角色:实现一个克隆自身的操作 四、原型模式的优点和缺点 Prototype模式优点: 1、可以在运行时刻增加和删除产品 2、可以改变值以...
本文实例讲述了JS学习笔记之原型链和利用原型实现继承。分享给大家供大家参考,具体如下: 原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的 实例对象中有__proto__,是...
大纲外卖: 使用prototype属性构建javascript对象的“蓝图” 通过理解,以其他面向对象的语言学习“类” 使用“继承”概念设计模块目标听众: 初学者学习javascript或具有另一种面向对象语言的经验的开发人员,学习...
Javascript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承。尽管人们经常将此看做是 Javascript 的一个缺点,然而事实上,原型式继承比传统的类继承模型要更加强大。举个例子,在原型式继承顶端构建...
主要介绍了JavaScript中的原型prototype属性使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下
prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。 --- 在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数(Function)就是一个对象,函数对象都有一...
Javascript 原型 这个包包含一个脚本,其中包含用于获取选项和运行某些东西的主要功能。 它是一部分,以学习如何编写标准代码和TDD的常用用法。 使用逐步此代码的开发。 安装 该包是自洽的,但如果你想自己测试,你...
prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。 --- 在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数就是一个对象(Function),函数对象都有一个子对象 ...
主要介绍了JavaScript中的prototype原型学习指南,包括原型链与原型继承等重要知识,需要的朋友可以参考下
内容概要:在 JavaScript 中,每个对象都有一个原型。当访问一个对象的属性或方法时,...这是一个可编辑的xmind文件,对原型链有清晰的勾画,不同的链用不同颜色进行了标识,内容一目了然,可以帮助快速学习原型链。