网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.min 方法.
.在Applet中实现事件向应.
.多媒体和网络时代中,C++,Delph.
.DeleteFolder 方法.
.JDK1.4和JDK1.5在linux下的中文显.
.J2ME网络应用程序在几款机器下性.
.使用JavaExcel API 往excel中插入.
.如何更改Netbeans中选项卡的名称.
.使用Java实现网络传输数据的压缩.
.目前流行的J2EE WEB应用架构介绍.
.02、《TIJ》目录前的部分.
.免费的开源应用服务器JBoss基础知.
.用JAVA实现UBB代码.
.Java中常见的异常.
.保持你对Java的敏感度.
.Java Applet 入门第二天.
.Hibernate Annotations&nbs.
.编写高级应用程序2.
.用JBuilder2005实现重构之认识重.
.Java开发中有关Java Socket编程的.

原始模型模式

发表日期:2008-1-5


        原始模型模式,我认为也可以称为克隆模式,就是由一个完整的产品对象复制出另一个对象的模式。它也是对象的创建模式,但是只与原始对象有关,不需要工厂类。

        原始模型模式最成功的应用之一就是Object类的clone方法,可能由于这种方法的存在,很多人没有意识到原始模型模式是一种特定的创建模式。但是,它的确是一种产生对象的模式,而且clone方法所实现的只是原始模型模式的一种情况。
        原始模型模式的对象创建方式有两种,可以分别称为浅复制和深复制:浅复制就是从原对象复制出新的对象时,并不复制它的成员对象,即它的成员对象句柄所指向的还是原对象中的成员对象;深复制就是在新对象中,成员对象也是新的。
Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
原始模型模式(图一)package prototype;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public interface Prototype ...{
原始模型模式(图四)
原始模型模式(图四)    public void printPart();
原始模型模式(图四)    
原始模型模式(图四)    Object flatClone();
原始模型模式(图四)    
原始模型模式(图四)    Object deepClone() throws Exception;
原始模型模式(图四)    
原始模型模式(图五)}
原始模型模式(图一)
原始模型模式(图一)
原始模型模式(图一)package prototype;
原始模型模式(图一)
原始模型模式(图一)import Java.io.*;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public class ConcretePrototype implements Prototype , Serializable...{
原始模型模式(图四)
原始模型模式(图四)    private Part part;
原始模型模式(图四)    
原始模型模式(图六)原始模型模式(图七)    public ConcretePrototype() ...{
原始模型模式(图四)        part = new Part();
原始模型模式(图八)    }
原始模型模式(图四)    
原始模型模式(图六)原始模型模式(图七)    public void printPart() ...{
原始模型模式(图四)        System.out.println(part);
原始模型模式(图八)    }
原始模型模式(图四)    
原始模型模式(图四)
原始模型模式(图六)原始模型模式(图七)    public Object flatClone() ...{
原始模型模式(图四)        ConcretePrototype cp = new ConcretePrototype();
原始模型模式(图四)        cp.part = this.part;
原始模型模式(图四)        return cp;
原始模型模式(图八)    }
原始模型模式(图四)
原始模型模式(图四)    
原始模型模式(图六)原始模型模式(图七)    public Object deepClone() throws Exception ...{
原始模型模式(图四)        ByteArrayOutputStream bo = new ByteArrayOutputStream();
原始模型模式(图四)        ObjectOutputStream oo = new ObjectOutputStream(bo);
原始模型模式(图四)        oo.writeObject(this);
原始模型模式(图四)        ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
原始模型模式(图四)        ObjectInputStream oi = new ObjectInputStream(bi);
原始模型模式(图四)        return (oi.readObject());
原始模型模式(图八)    }
原始模型模式(图四)
原始模型模式(图六)原始模型模式(图七)    class Part implements Serializable ...{
原始模型模式(图四)        
原始模型模式(图八)    }
原始模型模式(图四)    
原始模型模式(图五)}
原始模型模式(图一)
原始模型模式(图一)
原始模型模式(图一)package prototype;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public class Client ...{
原始模型模式(图四)    
原始模型模式(图六)原始模型模式(图七)    public static void main(String[] args) throws Exception ...{
原始模型模式(图四)        ConcretePrototype originate, cloned, deepCloned;
原始模型模式(图四)        originate = new ConcretePrototype();
原始模型模式(图四)
原始模型模式(图四)        Thread.sleep(2000);
原始模型模式(图四)
原始模型模式(图四)        cloned = (ConcretePrototype)originate.flatClone();
原始模型模式(图四)        deepCloned = (ConcretePrototype)originate.deepClone();
原始模型模式(图四)        System.out.println(originate);
原始模型模式(图四)        System.out.println(cloned);
原始模型模式(图四)        System.out.println(deepCloned);
原始模型模式(图四)        originate.printPart();
原始模型模式(图四)        cloned.printPart();
原始模型模式(图四)        deepCloned.printPart();
原始模型模式(图八)    }
原始模型模式(图四)
原始模型模式(图五)}
原始模型模式(图一)
 

    下面是这段代码的打印:

prototype.ConcretePrototype@1034bb5
prototype.ConcretePrototype@19efb05
prototype.ConcretePrototype@723d7c
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@22c95b

        可以看出,打印的前三行各不相同,这说明通过浅复制和深复制,所得到的对象都是与原对象不同的;打印的后三行中有两行相同,这说明,在浅复制时,成员对象的实体没有被复制,只是复制了其句柄,而深复制时,成员对象的实体也被复制了。

进入讨论组讨论。
上一篇:技巧-优化Derby数据库 人气:1169
下一篇:在Java中使用VC++组件 人气:883
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐