单例模式

时间:2024-4-3    作者:老大夫    分类: JAVA


设计模式

是一种设计模式。一种设计的风格,思考方式,固定的套路,和使用哪种语言无关。
之后的MVC模式,并不是一个具体的解决模式,是整个框架的布局。

单例模式

在整个软件系统中,对于某个类只能存在一个对象,并且该类只提供一个取得该对象的方法

实现思路

在类的内部设置私有(private)权限构造器,这样就无法在类的外部创建新的对象了。
调用方法设置为静态(static)权限,因为不使用静态就需要使用对象来调取方法
因为调用方法是静态的,所以调用的对象也需要是静态的

定义方法

(1)饿汉式

class Bank{
    //1.私有构造器
    private Bank(){
    }

    //2.类的内部创建实例
    private static Bank instance=new Bank();

    //3.获取实例的方法,必须声明为static
    public static Bank getInstance(){
        return instance;
    }
}

(2)懒汉式

class GirlFriend{
    //1.私有化构造器
    private  GirlFriend(){
    }
    //2.声明当前类的实例
    private static GirlFriend instance= null;
    //3.get方法调用时再创建实例,如未创建对象,则在方法内部创建对象
    public static GirlFriend getInstance(){
        //如果没有就创建一个再返回去
        if(instance==null){
            instance=new GirlFriend();
        }
        return instance;
    }
}

综上,对比两种方式,主要区别在于 饿汉式先创建好了实例对象,懒汉在调用时才创建对象
饿汉式,立即加载,随着类的加载的加载。生命周期特别长,在不调用时依然存在。没法回收,算是一种内存泄漏。
懒汉式,延迟加载,调用时才加载。

饿汉式 懒汉式
写法简单,使用时加载快 调用时需要检查实例是否存在,加载慢
内存占用时间长 内存占用时间短
线程安全 容易多个线程同时创建实例

实际应用

windows中的 回收站、任务管理器这种都是唯一的,java中的Runtime类、application、数据连接池等等也是。
主要突出唯一性,“一个就行”的意思。


扫描二维码,在手机上阅读

推荐阅读: