Java开发——41.设计模式_1.单例(Singleton)模式

什么是设计模式?

在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。(设计模式就是像是取最优的模板一样,类似英文作文模板。)

学习设计模式的目的:

使得开发项目更加容易扩展和维护,解决方式就是一个“分工”;在不改变原有代码的基础上实现扩展操作。

现阶段学习的设计模式仅做了解的设计模式:

单例模式(Singleton)是需要掌握的!!!

模板方法设计模式(TemplateMethod)/代理模式(Proxy)有些相像,学习的时候注意区分;

工厂模式,又分为了三大类,所以区别学习,注意抽象工模式涉及反射的内容,后续再补充…

在这里插入图片描述

单例模式(Singleton):

采用一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

拆解主要内容:

对某个类只能存在一个对象实例 -> private 类名(){} -> 私有化构造器
该类只提供一个取得其对象实例的方法 -> 提供一个可以返回该对象的方法
​
1.创建类
2.私有化类的构造器
3.创建一个类对象并将类封装起来
4.创建一个能返回该类对象的方法
5.必须保证该方法能通过类名获取到 -> 声明为static方法 -> 推断得第四步为static修饰的对象

饿汉式:

天然的线程安全,所以如下写法就是最标准的形式。

public class DemoSingleton {public static void main(String[] args) {
        Bank.getInstance();
    }}
//1.创建类
class Bank{
    //2.私有化构造器
    private Bank(){}
    //3.创建一个类对象并将类封装起来
    //5.因为静态方法只能使用静态的变量,所以该实例化对象也必须声明为static的
    private static Bank instance = new Bank();
    //4.创建一个能返回该类对象的方法
    //我们需要这个方法返回该类的实例化对象,需要声明该方法为static,可以通过类名调用
    public static Bank getInstance(){return instance;
    }}

饿汉式的好处:线程安全的
饿汉式的缺点:对象的加载时间长,可能在调用getInstance()的时候才需要创建对象,但是在调用getInstance()前对象就是已存在。

懒汉式:

下面这种写法是存在安全隐患的,最为安全需要加上线程同步(synchronized)!

public class DemoSingleton {public static void main(String[] args) {
        Bank.getInstance();
    }}
//1.创建类
class Bank{
    //2.私有化构造器
    private Bank(){}
    //3.创建一个类对象并将类封装起来
    //5.因为静态方法只能使用静态的变量,所以该实例化对象也必须声明为static的
    private static Bank instance = null;
    //4.创建一个能返回该类对象的方法
    //我们需要这个方法返回该类的实例化对象,需要声明该方法为static,可以通过类名调用
    public static synchronized Bank getInstance(){//此时同步监视器就是Bank.class
        if (instance == null) {
            instance = new Bank();
        }
        return instance;
  /*
    public static  Bank getInstance(){
        //这种效率会相对高一点,因为如果instance != null后,后续的线程就可以直接拿到对象,不用在抢占锁了
        if (instance == null) {
            synchronized (Bank.class) {
                if (instance == null) {
                    instance = new Bank();
                }
            }
        }
        return instance;
    }
    */
}

懒汉式的好处:延迟对象的创建;
懒汉式的局限:天然的线程不安全,需要后续进行线程同步。

饿汉式和懒汉式在面试的时候可能会让手写代码所以建议掌握!!!
另外,饿汉式是天然线程安全的,所以不用额外担心安全隐患的问题;但是在书写懒汉式要保证线程安全!!!

欢迎关注微信公众号:小红的成长日记,一起学Java!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值