设计模式—KQC 0920
①报错:Exception in thread “main” java.io.NotSerializableException:com.aaa.test1.God
(翻译成中文:在com.aaa.test1.God类的线程中出现无序列化异常)
解决:在God类之后实现Serializable接口。即:implements Serializable
(extends是继承类,implements是实现接口。)java中 implement和extends的作用和区别详细解释https://blog.csdn.net/YouYou_GO/article/details/83539537
②设计模式测试—KQC
要求:
1.定义上帝类:
方法: 创建世界
2.要求使用懒汉,并且多线程安全的单例模式创建上帝类对象
3.接着针对创建的上帝类对象,使用深拷贝的方式,创建另外一个上帝对象
4.测试:
a.用单例模式获取两个上帝类对象,打印对象地址
b.用深拷贝方式获取两个对象,打印对象地址
实现效果:
代码:
CopyUtil :
package com.aaa.test1;
import java.io.*;
public class CopyUtil {
public static Object copyDeep(Object obj) throws IOException, ClassNotFoundException {
//定义 内存字节数组输出流:将字节数组输出到内存中的某个区域
ByteArrayOutputStream bos=new ByteArrayOutputStream();
//对象输出字节流:将数据对象写入到内存字节数组流中
ObjectOutputStream oos=new ObjectOutputStream(bos);
oos.writeObject(obj);
//创造字节数组输入流:从上面的字节数组输出流中读取数据
ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois=new ObjectInputStream(bis);
return ois.readObject();
}
}
God :
package com.aaa.test1;
import java.io.Serializable;
public class God implements Serializable {
//创造世界方法
public void create(){
System.out.println("创造世界");
}
//静态内部类
static class InnerCls{
//内部类中定义静态对象
static God god=new God();
}
//获取静态内部类中的对象
public static God getInstance(){
return InnerCls.god;
}
}
GodCopy :
package com.aaa.test1;
import java.io.IOException;
public class GodCopy {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//原型对象
God g1=new God();
//通过字节数组流的方式,将对象数据写道内存中,然后再复制一份。实现深度copy
God g2=(God) CopyUtil.copyDeep(g1);
//调用方法
g1.create();
g2.create();
//输出对象
System.out.println(g1);
System.out.println(g2);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118028.html