- 浏览: 18325 次
- 性别:
- 来自: 西安
最新评论
Prototype Pattern:就是通过复制现在已经存在的对象来创建一个新的对象。当创建给定类的实例的过程很昂贵或很复杂时,就使用它。
Name.java
package com.flyingh.dp.prototype; import java.io.Serializable; @SuppressWarnings("serial") public class Name implements Serializable { private String firstName; private String lastName; public Name(String firstName, String lastName) { super(); this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((firstName == null) ? 0 : firstName.hashCode()); result = prime * result + ((lastName == null) ? 0 : lastName.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Name other = (Name) obj; if (firstName == null) { if (other.firstName != null) return false; } else if (!firstName.equals(other.firstName)) return false; if (lastName == null) { if (other.lastName != null) return false; } else if (!lastName.equals(other.lastName)) return false; return true; } }
Person.java
package com.flyingh.dp.prototype; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; @SuppressWarnings("serial") public class Person implements Cloneable, Serializable { private Name name; private int age; public Person(Name name, int age) { super(); this.name = name; this.age = age; } public Name getName() { return name; } public void setName(Name name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } public Person deepClone() { // TODO Auto-generated method stub return new Person(new Name(name.getFirstName(), name.getLastName()), age); } public Person deepClone2() throws IOException, ClassNotFoundException { // TODO Auto-generated method stub ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(this); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); return (Person) ois.readObject(); } }
Client.java
package com.flyingh.dp.prototype; import java.io.IOException; public class Client { public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException { Person per1 = new Person(new Name("张", "三"), 20); Person per2 = (Person) per1.clone(); System.out.println(per1 != per2); System.out.println(per1.getClass() == per2.getClass()); System.out.println(per1.equals(per2));// this is not an absolute requirement. System.out.println(per1.getName() == per2.getName()); System.out.println("***********"); per2 = per1.deepClone(); System.out.println(per1 != per2); System.out.println(per1.getClass() == per2.getClass()); System.out.println(per1.equals(per2));// this is not an absolute requirement. System.out.println(per1.getName() == per2.getName()); System.out.println("***********"); per2 = per1.deepClone2(); System.out.println(per1 != per2); System.out.println(per1.getClass() == per2.getClass()); System.out.println(per1.equals(per2));// this is not an absolute requirement. System.out.println(per1.getName() == per2.getName()); } }
程序运行结果如下:
true true true true *********** true true true false *********** true true true false
发表评论
文章已被作者锁定,不允许评论。
-
Interpreter
2011-11-24 21:19 839Interpreter Pattern:其意图是给定一个语言, ... -
Visitor
2011-11-24 17:37 659Visitor Pattern:表示一个作用于某对象结构中的各 ... -
Mediator
2011-11-24 16:22 663Mediator Pattern: 用一 ... -
Memento
2011-11-23 21:56 685Memento Pattern:在不破坏封闭的前提下,捕获一个 ... -
Flyweight
2011-11-23 18:38 651享元模式以共享的方式高效地支持大量的细粒度对象. 1).Fl ... -
Builder
2011-11-22 16:38 764Builder Pattern:可以将一个产品的内部表象与产品 ... -
Bridge
2011-11-22 15:05 685桥梁模式的用意是"将抽象化(Abstraction) ... -
Chain Of Responsibility
2011-11-21 23:05 658Chain Of Responsibility Pattern ... -
Abstract Factory
2011-11-21 22:00 644下面以Mac和PC的CPU和RAM为例,代码如下: Cpu. ... -
Proxy
2011-11-18 18:47 661Proxy Pattern:对其他对象提供一种代理以控制对这个 ... -
State
2011-11-18 15:57 678State Pattern:当一个对象的内在状态改变时允许改变 ... -
Composite
2011-11-17 17:09 795Composite Pattern:意图是将对象组合成树形结构 ... -
Iterator
2011-11-16 16:56 891Iterator Pattern:其意图是提供一种方法顺序访问 ... -
Template Method
2011-11-16 11:43 661模板方法模式:在一个方法中定义一个算法的骨架,而将一些实 ... -
Facade
2011-11-15 23:00 598Facade Pattern:为子系统中的各类(或结构与方法) ... -
Adapter
2011-11-15 21:43 632Adapter Pattern:将一个类的接口,转换成客户所期 ... -
Command
2011-11-14 23:06 5741).下面以Boss和Clerk为例: Clerk.java ... -
Factory Method
2011-11-13 20:44 595Simple Factory: 以Fruit为例,以下是实现 ... -
Decorator
2011-11-12 23:09 572装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的 ... -
Observer
2011-11-12 21:30 601观 察 者 模 式 定义了对象之间的一对多依赖,这样一来 ...
相关推荐
《prototype_1.7.3.js:JavaScript框架的里程碑》 在JavaScript的世界里,Prototype库是一个不可或缺的重要组成部分,尤其在Web开发领域,它为开发者提供了强大的功能和便利性。Prototype_1.7.3.js是这个库的一个...
Prototype是JavaScript库,它为浏览器环境提供了强大的对象扩展和功能,尤其在处理DOM(文档对象模型)和Ajax交互时。这个压缩包包含了Prototype库的多个版本的手册和源代码文件,便于开发者理解和使用。 首先,...
标题"prototype_PrototypeJS1.6_"中提到的"Prototype"是一个JavaScript库,它为JavaScript编程提供了一套丰富的工具集,主要用于简化DOM操作、创建Ajax应用以及实现对象的继承机制。"1.6版本"表明这是该库的一个特定...
### Prototype框架:深入理解与应用 #### 一、概述 **Prototype**是一个旨在简化动态Web应用程序开发的JavaScript框架。由Sam Stephenson创建,并于2005年2月作为开源项目发布。Prototype的核心团队成员包括Thomas...
Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用的功能,使开发Web应用程序变得更加简单。这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先...
### Prototype的Ajax介绍 #### 一、Prototype框架与Ajax **Prototype** 是一款JavaScript库,其设计目的是为了简化客户端脚本编程。它提供了一系列高级功能,使得开发人员能够更加高效地构建动态网页应用。其中,*...
标题提及了两个版本的Prototype文档,分别是"Prototype_1.4.doc"和"Prototype_1.5.1.chm"。Prototype是JavaScript库的一个早期且广泛使用的版本,它提供了许多实用的功能,如对象扩展、事件处理、Ajax操作等,极大地...
Prototype JavaScript 框架是Web开发中的一个关键工具,它为JavaScript编程提供了许多实用的类库函数和设计模式。这个“Prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版”正是面向希望深入学习和掌握...
Prototype 是一个广泛使用的JavaScript库,它为浏览器端的开发提供了许多强大的功能,特别是对于处理DOM操作、Ajax交互以及对象扩展等方面。这个“prototype帮助中文文档”涵盖了Prototype库的核心概念、方法和最佳...
在JavaScript中,`prototype`是一个核心概念,它与对象继承紧密相关。`prototype`机制是JavaScript实现面向对象编程的关键部分,允许我们为对象添加或扩展属性和方法。在这个"非常有用的prototype实例"中,我们可以...
**Prototype JavaScript 库** Prototype 是一个广泛使用的JavaScript库,它为Web开发提供了强大的工具和功能。这个库的主要目标是简化JavaScript编程,通过提供面向对象的语法、强大的DOM操作以及Ajax功能,来提升...
《Prototype开发者手册(中文版)》是一本专为JavaScript开发者准备的重要参考资料,它详细介绍了Prototype JavaScript框架的使用方法和核心概念。Prototype是一个广泛使用的开源JavaScript库,它的目标是简化...
Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript编程提供了许多实用的功能,极大地简化了DOM操作、事件处理、Ajax交互以及对象扩展等任务。这个压缩包包含的“prototype.js”文件就是Prototype.js的核心...
《Prototype 1.5.1使用手册》是针对JavaScript库Prototype的一个详细指南,该库是Web开发中的一个强大工具,尤其在处理DOM操作、Ajax交互和函数增强方面表现卓越。本手册以.chm(Compiled Help Manual)格式提供,...
Prototype是JavaScript库,它扩展了JavaScript的基本对象,提供了强大的面向对象编程功能,使得在JavaScript中进行复杂的编程操作变得更加简单。这个“prototype从入门到精通”的教程涵盖了从基础概念到高级特性的...
### Prototype框架概览 #### 一、Prototype框架简介 **Prototype** 是一款JavaScript库,它为Web开发提供了强大的工具集,特别是在实现Ajax交互方面。该文档由知名的作者和开发者Marty Hall编写,针对的是...
**Prototype 1.6 中文版CHM**是JavaScript开发者的重要参考资料,它是Prototype.js库的中文版帮助文档。Prototype.js是一个强大的JavaScript库,它为Web开发提供了许多实用的功能,简化了DOM操作,增强了对象和数组...
### Prototype 1.3 源码解读 #### 前言 Prototype 是一个轻量级的 JavaScript 库,它简化了 DOM 操作,并提供了一系列便捷的方法来处理对象、数组等基本类型。版本 1.3 相对于之前的 1.2 版本有了不少改进与增强,...