创建型设计模式:单例模式

认识

  单例模式是23种设计模式中最简单的模式了,所谓单例,就是说一个类只能有一个实例。大白话:对象是唯一的,不可能有第二个,比如说世界上不可能有两片相同的花瓣,也没有两片相同的雪花,当然也没有第二个昆仑(月亮)。对风花雪月没什么概念的话,那就看看Java里的单例吧。

  在Java里得ServletContext、Spring里的ApplicationContext、数据库中的连接池…好多都是单例模式。

特点

1.单例类只有一个实例
2.这个实例必须由单例类自身创建
3.单例类对外提供一个访问它的全局访问点

实现

  用懒汉模式模拟赏月

public class SingletonLazy {
    public static void main(String[] args) {
        Moon m1 = Moon.getInstance();
        m1.getName();
        Moon m2 = Moon.getInstance();
        m2.getName();
        System.out.println(m1 == m2 ? "它们是同一个月亮" : "它们不是同一个月亮");;
    }
}
class Moon {
    private static volatile Moon instance=null;    //保证instance在所有线程中同步
    //private避免类在外部被实例化
    private Moon()
    {
        System.out.println("天上有一轮明月");
    }
    public static synchronized Moon getInstance()
    {
        //在getInstance方法上加同步
        if(instance==null)
        {
            instance=new Moon();
        }
        else
        {
            System.out.println("天上已经有月亮了");
        }
        return instance;
    }
    public void getName()
    {
        System.out.println("名字:昆仑");
    }
}

  打印结果

天上有一轮明月
名字:昆仑
天上已经有月亮了
名字:昆仑
它们是同一个月亮

  用饿汉模式模拟赏月

class Moon {
    private static final Moon instance= new Moon();
    private Moon()
    {
        System.out.println("天上有一轮明月");
    }
    public static Moon getInstance()
    {
        return instance;
    }
    public void getName()
    {
        System.out.println("名字:昆仑");
    }
}

  打印结果

天上有一轮明月
名字:昆仑
名字:昆仑
它们是同一个月亮
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值