--------------------------------单例设计模式-------------------------------- 单例模式是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。 创建过程: 1.构造器私有化 2.类内部创建对象 3.提供一个public的静态方法 单例模式有八种方式(可以使用五种): 1.饿汉式(静态常量) Y 2.饿汉式(静态代码块) Y 3.懒汉式(线程不安全) N 4.懒汉式(线程安全,同步方法) N 5.懒汉式(线程安全,同步代码块) N 6.双重检查 Y 7.静态内部类 Y 8.枚举 Y ---------------------------------------------------------------------------- 1.饿汉式(静态常量) 优点:简单、避免线程同步问题 缺点:类装载时候完成实例化,没有达到懒加载的效果。如果没有使用过这个实例,则造成内存浪费。 结论:单例模式可用,但可能造成内存浪费。 2.饿汉式(静态代码块) 优点:简单、避免线程同步问题 缺点:类装载时候完成实例化过程在静态代码块中。如果没有使用过这个实例,则造成内存浪费。 结论:单例模式可用,但可能造成内存浪费。 3.懒汉式(线程不安全) 优点:起到了懒加载的效果,但只能在单线程下使用。 缺点:多线程下可能产生多个实例。 结论:单例模式不可用。 4.懒汉式(线程安全,同步方法) 优点:解决了线程安全问题。 缺点:方法进行同步效率太低。 结论:单例模式不用。 5.懒汉式(线程安全,同步代码块) 结论:单例模式不用。 6.双重检查 优点:线程安全、延迟加载、效率较高。 结论:单例模式可用。 7.静态内部类 优点:线程安全、延迟加载、效率高。 结论:单例模式可用。 8.枚举 优点:避免多线程同步问题,还可以防止反序列化重新创建新的对象。 结论:单例模式可用。 ---------------------------------------------------------------------------- 总结 注意事项: 在JDK中,java.lang.Runtime就是经典的单例模式(饿汉式)。 单例模式保证系统内存只存在某类的一个对象,节省资源; 对于频繁创建销毁的对象,使用单例模式可以提高性能; 当实例化对象时,使用相应的静态方法来获取,而不是使用new。 使用场景: 需要频繁的进行创建和销毁的对象; 创建对象时耗时过多或耗费资源过多(重量级对象),但又经常用到的对象; 工具类对象; 频繁访问数据库或文件的对象(比如数据源、session工厂等)。
Java设计模式学习---单例模式
最新推荐文章于 2024-07-10 21:37:49 发布