标签:而且 vat 唯一性 设计 let 设计模式 优点 好的 应用
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
为什么使用单例模式:
多个线程操作不同实例对象。多个线程要操作同一对象,要保证对象的唯一性
优点:
1、在内存里只有一个实例,减少了内存的开销
2、避免对资源的多重占用
在对比每个模式通常往一下三个方面:线程的安全性、性能、懒加载(lazy )
public class HungerySingleton { //加载的时候就产生的实例对象 private static HungerySingleton instance=new HungerySingleton(); private HungerySingleton(){ } //返回实例对象 public static HungerySingleton getInstance(){ return instance; } public static void main(String[] args) { for (int i = 0; i < 20; i++) { new Thread(()->{ System.out.println(HungerySingleton.getInstance()); }).start(); } } }
线程安全性:在加载的时候已经被实例化,所以只有这一次,线程安全的
懒加载:没有延迟加载,好长时间不使用,影响性能
性能:性能比较好
public class HoonSingleton { private static HoonSingleton instance=null; private HoonSingleton(){ } public static HoonSingleton getInstance(){ if(null==instance) instance=new HoonSingleton(); return instance; } public static void main(String[] args) { for (int i = 0; i < 20; i++) { new Thread(()->{ System.out.println(HoonSingleton.getInstance()); }).start(); } } }
线程安全:不能保证实例对象的唯一性,非线程安全
懒加载:引发了一个不安全的问题,对于单例模式的应用有风险,而且风险比较大,,实现了懒加载
性能:相对于饿汉式还是比较好的
线程安全:是线程安全
懒加载:是懒加载
性能:+synchronized 退化到了串行执行
public class DCL { private static DCL instance=null; private DCL(){ } public static DCL getInstance(){ if(null==instance) synchronized (DCL.class){ if(null==instance) instance=new DCL(); } return instance; } public static void main(String[] args) { for (int i = 0; i < 20; i++) { new Thread(()->{ System.out.println(DCL.getInstance()); }).start(); } } }
性能比较好
懒加载:实现了懒加载
线程的安全性:保证了线程的安全
只需要加一段代码:
private volatile static DCL instance=null;
可以避免空指针异常
声明类的时候,成员变量中不声明实例变量,而放到内部静态类中
public class HolderDemo { private HolderDemo(){ } private static class Holder{ private static HolderDemo instance=new HolderDemo(); } //懒加载 //synchronized //<init> public static HolderDemo getInstance(){ return Holder.instance; } //广泛的一种单例模式 }
public class EnumSingletonDemo { private EnumSingletonDemo(){ } //延迟加载 private enum EnumHolder{ INSTANCE; private static EnumSingletonDemo instance=null; private EnumSingletonDemo getInstance(){ instance=new EnumSingletonDemo(); return instance; } }//懒加载 public static EnumSingletonDemo getInstance(){ return EnumHolder.INSTANCE.instance; } }
标签:而且 vat 唯一性 设计 let 设计模式 优点 好的 应用
原文地址:https://www.cnblogs.com/grow001/p/12244082.html