2017 上海网站备案,php 网站 下载,做网站做什么类型 比较赚钱,乐清站在哪一、单例模式概念
单例模式是一种创建型设计模式#xff0c;它确保一个类只有一个实例#xff0c;并提供一个全局访问点来访问该实例。它的目的是限制一个类只能创建一个对象#xff0c;以确保在整个应用程序中只有一个共享的实例。
单例模式通常用于以下情况#xff1a;…一、单例模式概念
单例模式是一种创建型设计模式它确保一个类只有一个实例并提供一个全局访问点来访问该实例。它的目的是限制一个类只能创建一个对象以确保在整个应用程序中只有一个共享的实例。
单例模式通常用于以下情况
当一个类只需要一个实例来协调操作时例如数据库连接池、线程池等。当希望在整个应用程序中共享某个资源或状态时例如配置信息、日志记录器等。当创建一个对象的成本很高但又需要频繁地使用该对象时可以通过单例模式来避免重复创建对象提高性能。
单例模式的关键特点包括
私有的构造方法通过将构造方法私有化防止外部代码直接实例化该类。静态变量持有实例通过一个静态变量来持有类的唯一实例。全局访问点提供一个公共的静态方法来获取该实例以便其他代码可以访问该实例。
常见的单例模式实现方式包括饿汉式、懒汉式、双重检查锁定等。每种实现方式都有其优缺点选择适合具体需求的实现方式非常重要
二、单例模式类型
1、懒汉式
这里使用了volatile防止指令重排序。
另外使用synchronized修饰代码加锁变成线程安全。
public class SingleTon {
// 懒汉式private static volatile SingleTon singleTon;private SingleTon(){}public static SingleTon getInstance(){if(singleTonnull){synchronized (SingleTon.class){if(singleTonnull){return new SingleTon();}}}return singleTon;}
}
2、饿汉式
这里的饿汉式没什么好说的。
public class SingleTon1 {
// 饿汉式private static final SingleTon1 singleTon1 new SingleTon1();private SingleTon1(){}public static SingleTon1 getInstance(){return singleTon1;}
}3、枚举饿汉式升级版
前面两种懒汉式和饿汉式都可以被反射或者序列化破坏他们俩可以把单例对象破坏掉即产生多个对象而使用枚举就可以避免这种情况而且使用枚举在代码简洁的情况下还不用做任何操作即可保证创建对象的单一性和线程的安全性。
public enum EnumSingleTon {INSTANCE;EnumSingleTon(){System.out.println(枚举创建对象了);}public void doSomeThing(){System.out.println(这是枚举的单例模式);}public static void main(String[] args) {test();}public static void test(){EnumSingleTon enumSingleTon1 EnumSingleTon.INSTANCE;EnumSingleTon enumSingleTon2 EnumSingleTon.INSTANCE;System.out.print(enumSingleTon1和enumSingleTon2的地址是否相同);System.out.println(enumSingleTon1enumSingleTon2);}
}运行结果 学生所做仅记录学习。