design pattern : Prototype学习日记(原创,欢迎转载!)
来源:互联网 发布:涉密 甲级软件开发 编辑:程序博客网 时间:2024/05/18 00:39
design pattern : Prototype
用原型实例指定创建对象的种类,copy这些原型来川建新的对象
允许对象创建可订制对象,without know the details in creation.
原理:要创建的对象通过请求原型对象copy他们自己来创建
(clone protected Object clone() throws CloneNotSupportedException创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。一般来说,对于任何对象 x,如果表达式:
x.clone() != x是正确的,则表达式:
x.clone().getClass() == x.getClass()将为 true,但这些不是绝对条件。一般情况下是:
x.clone().equals(x)将为 true,但这不是绝对条件。
按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。
按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。 )
java中提供了clone()来实现对象的克隆,所以prototype实现变得简单 with clone()
example:通过抽象类实现,interface同样可以
public abstract class AbstractSpoon implements Cloneable
{
String spoonName; //
public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
public String getSpoonName() {return this.spoonName;}
public Object clone() //clone instance
{
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("AbstractSpoon is not Cloneable");
}
return object;
}
}
然后写两个实例:
1. 汤勺
public class SoupSpoon extends AbstractSpoon
{
public SoupSpoon()
{
setSpoonName("Soup Spoon");
}
}
2,沙拉勺
public class SaladSpoon extends AbstractSpoon
{
public SaladSpoon()
{
setSpoonName("Salad Spoon");
}
}
调用prototype模式
AbstractSpoon spoon1 = new SoupSpoon();
AbstractSpoon spoon2 = new SaladSpoon();
如果还要再来个勺子,那么可以通过SoupSpoon spoon3 = (SoupSpoon)spoon1.clone();
这样实现spoon3的时候你完全可以不用管是怎么实现的,它就是个汤勺,像其他汤勺一样
用原型实例指定创建对象的种类,copy这些原型来川建新的对象
允许对象创建可订制对象,without know the details in creation.
原理:要创建的对象通过请求原型对象copy他们自己来创建
(clone protected Object clone() throws CloneNotSupportedException创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。一般来说,对于任何对象 x,如果表达式:
x.clone() != x是正确的,则表达式:
x.clone().getClass() == x.getClass()将为 true,但这些不是绝对条件。一般情况下是:
x.clone().equals(x)将为 true,但这不是绝对条件。
按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。
按照惯例,此方法返回的对象应该独立于该对象(正被克隆的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被克隆对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。 )
java中提供了clone()来实现对象的克隆,所以prototype实现变得简单 with clone()
example:通过抽象类实现,interface同样可以
public abstract class AbstractSpoon implements Cloneable
{
String spoonName; //
public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
public String getSpoonName() {return this.spoonName;}
public Object clone() //clone instance
{
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("AbstractSpoon is not Cloneable");
}
return object;
}
}
然后写两个实例:
1. 汤勺
public class SoupSpoon extends AbstractSpoon
{
public SoupSpoon()
{
setSpoonName("Soup Spoon");
}
}
2,沙拉勺
public class SaladSpoon extends AbstractSpoon
{
public SaladSpoon()
{
setSpoonName("Salad Spoon");
}
}
调用prototype模式
AbstractSpoon spoon1 = new SoupSpoon();
AbstractSpoon spoon2 = new SaladSpoon();
如果还要再来个勺子,那么可以通过SoupSpoon spoon3 = (SoupSpoon)spoon1.clone();
这样实现spoon3的时候你完全可以不用管是怎么实现的,它就是个汤勺,像其他汤勺一样
- design pattern : Prototype学习日记(原创,欢迎转载!)
- Design Pattern - Prototype(C#)
- [Design Pattern]:Prototype
- Prototype Design Pattern
- Design Pattern-Prototype
- java design pattern -- prototype
- Design Pattern :Prototype
- Design Pattern: Prototype 模式
- Java Design Pattern: Prototype
- design pattern——prototype
- Prototype design pattern in Java
- Design Pattern - Creational Patterns - Prototype Pattern
- 原型设计模式(Prototype Design Pattern)
- 原型设计模式(prototype design pattern)
- 设计模式5 - Prototype Design Pattern
- Design Pattern Prototype 原型设计模式
- Design Pattern学习笔记(一)
- Design Pattern学习笔记(三)
- ORACLE基础SQL,常用语句大集合
- 加班回家!
- 数据接口设计中遗漏的版本差异
- sffs
- 写operator new和operator delete的规则
- design pattern : Prototype学习日记(原创,欢迎转载!)
- Linux下软件的安装与卸载(全面)
- 安装openSUSE10.2和添加nvidia-driver+compiz+xgl
- 放假归来,今天开始上班了
- groovy 闭包样例
- 非药物治疗鼻炎方法大全(转)
- mysql中的mysql_real_connect连接参数设置
- IT职业教育(9)培训的意义探讨
- lucene结构说明中文文档