首页 > 代码库 > 设计模式--单例模式
设计模式--单例模式
实例
/** * 单例模式 * 应用场合:有些对象只需要有一个就足够了 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:饿汉与懒汉 * */public class Singleton { /** * 1.将构造方法私有化,不允许外部直接创建对象 * */ private Singleton(){ } /** * 2.创建类的实例是唯一的,使用private static 修饰 * 将类实例定义成static静态可以让外部类通过Singleton s1=Singleton.instance;这种方式调用 * */ static Singleton instance=new Singleton();}
public class test { public static void main(String[] args) { //创建了一个Singleton实例 /** * 之所以可以创建实例是因为在Singleton中有一个默认公开的构造方法 * 将构造方法重写成私有的,外界就无法在直接通过构造方法创建时实例了,就可避免多个实例出现 * * */ Singleton s1=Singleton.instance; Singleton s2=Singleton.instance; if(s1==s2){ System.out.println("s1与s2是同一个实例"); }else{ System.out.println("s1与s2不是同一个实例"); } }}
结果
s1与s2是同一个实例
另一个情况:将成员变量改为private时,外部就无法通过那个Singleton.instance方式调用,解决方法(通过封装的方式调整一下代码)
private static Singleton instance=new Singleton(); /** * 4.提供一个获取实例的方法,使用public static 修饰 * */ public static Singleton getInstance(){ return instance; }
提供了获取实例的方法就可以通过Singleton.getInstance(),来获取到
Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance();
结果
s1与s2是同一个实例
private static Singleton instance=new Singleton();
这段代码什么时候加载呢:static的静态的成员属于类所有,当类加载的时候它就会去执行,所以当Singleton这个类加载的时候,它就会去创建一个类的实例,不管用户是否会去调用或者获取这个实例,它都已经加载了--称为饿汉
以上为单例模式的饿汉模式
/** * 懒汉模式 * */public class Singleton2 { /** * 1.将构造方法私有化,不允许外界直接创建对象 * */ private Singleton2(){} /** * 2.声明类的唯一实例,使用private static修饰 * 当类加载的时候,并没有执行,只有在获取的时候再去判断,为空时才去创建实例, * 当第二次,第三次再次获取的时候因为已经创建过了就不会再去创建--懒汉模式 * */ private static Singleton2 instance; /** * 3.提供一个用于获取实例的方法,使用public static修饰 * */ public static Singleton2 getInstance(){ if(instance==null){ instance=new Singleton2(); } return instance; }}
/** * 懒汉模式 * */ Singleton s3=Singleton.getInstance(); Singleton s4=Singleton.getInstance(); if(s3==s4){ System.out.println("s3与s4是同一个实例"); }else{ System.out.println("s3与s4不是同一个实例"); } }
区别
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全的;懒汉模式特点在加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的
设计模式--单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。