一、单例模式Singleton
特点:
1、单例类只能有一个实例
2、单例类自己创建自己的唯一实例
3、单例类必须给整个系统提供这个实例
饿汉式:
public class Singleton { private static final Singleton singleton=new Singleton(); private Singleton(){ } public static Singleton getSingleton(){ return singleton; } }
优点:写法简单,在类装载的时候就完成了实例化,避免了线程同步问题
缺点:没有延迟加载在类装载的时候就完成了实例化,如果没有使用过实例,就会造成内存浪费
懒汉式:线程不安全
1、构造函数私有化
2、类中初始化一个私有的静态常对象
3、通过get方法获取该实例
public class Singleton { private static final Singleton singleton=null; private Singleton(){ } public static Singleton getSingleton(){ if(singleton==null){ singleton=new Singleton(); } return singleton; } }
二、原型模式prototype:通过拷贝指定的原型实例,创建和该对象一样的新对象
深拷贝:不仅复制成员变量中 基本数据类型的值,还会给引用数据类型的成员变量申请存储空间,这样拷贝出来的新对象不会对原来造成影响
浅拷贝:1、当成员变量是基本数据类型时,复制值 2、当成员变量是引用数据类型,复制引用数据类型的地址值
【注】
1、Object类中提供的clone都是浅拷贝,可以把String当作基本类
2、使用clone方法,类的成员变量不能增加final关键字
实现Cloneable接口,当作原型
public class PrototypeClass implements Cloneable{ @Override protected PrototypeClass clone() throws CloneNotSupportedException { PrototypeClass prototypeClass=null; prototypeClass= (PrototypeClass) super.clone(); return prototypeClass; } }