1.单例模式Singleton
public class SingleTestLazy {
//懒汉模式,第一次加载类到内存就会被初始化,不存在多线程的情况;Static Final使得懒加载模式
private static final SingleTestLazy INSTANCE=new SingleTestLazy();
private SingleTestLazy(){
}
public static SingleTestLazy getInstance(){
return INSTANCE;
}
}
考虑线程安全后改写
public class SingleTestHur {
//Code1
//private static SingleTestHur instense;
//3.在执行 instense=new SingleTestHur(); 1、实际 先分配内存空间给instense.2.执行构造方法。3:将新建的instance指向内存空间
//使用volatile关键字使得变量不存在变量副本,每次都去内存取值
//单线程使用Volatile主要是禁止指令重排序
private volatile static SingleTestHur instense;
private SingleTestHur(){
}
//饿汉模式,使用synchronized进行线程同步
public static SingleTestHur getInstents(){ //1.可在说明方法是加同步操作
if(instense==null){
synchronized(SingleTestHur.class){ //2.在方法上架锁的概念
if(instense==null)
instense=new SingleTestHur();
}
}
return instense;
}
//Code2
//使用静态内部类
private static class SingleHold {
private static SingleTestHur instance=new SingleTestHur();
}
//构造方法
public static SingleTestHur getInstanceByClass(){
return SingleHold.instance;
}
}
2.工厂模式Factory
3.原型模式Prototype
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的,先创建一个原型类:
参考博客:http://zz563143188.iteye.com/blog/1847029
public class Prototype implements Cloneable,Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String str;
private SerializableObject obj;
//浅复制
public Object clone() throws CloneNotSupportedException {
Prototype p=(Prototype)super.clone();
return p;
}
//深复制
public Object deepClone() throws IOException, ClassNotFoundException{
//* 写入当前对象的二进制流 */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
//* 读出二进制流产生的新对象 */
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public SerializableObject getObj() {
return obj;
}
public void setObj(SerializableObject obj) {
this.obj = obj;
}
}
class SerializableObject implements Serializable{
private static final long serialVersionUID = 1L;
}