单例模式、工厂模式

导读:本篇文章讲解 单例模式、工厂模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、单例模式

单例模式是校招中最常考的设计模式之一。

啥是设计模式?
设计模式好比象棋中的”棋谱”:红方当头炮,黑方马来跳… 针对红方的一些走法,黑方应招的时候有一些固定的套路,按照套路来走局势就不会吃亏。
软件开发中也有很多常见的”问题场景”,针对这些问题场景,大佬们总结出了一些固定的套路,按照这个套路来实现代码,也不会吃亏。

单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例!

这一点在很多场景上都需要,比如 JDBC 中的 DataSource 实例就只需要一个。

注意: 像这样的需求,不依赖单例模式,就只是靠”君子协定”能不能行?也是可以的!但是人总是避免不了犯错,单例模式就是针对上述的需求场景进行了更强制的保证!当创建出多个实例时,就会编译报错~

单例模式具体的实现方式,分成”饿汉”和”懒汉”两种:

1.1 饿汉模式

1.1.1 实现

类加载的同时,创建实例:

class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}    

在这里插入图片描述
同时构造方法是private私有的,不能在类外创建!:
在这里插入图片描述
为什么被叫作”饿汉模式”呢?
在这里插入图片描述

1.1.2 补充

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

y属性是static修饰,静态的;x属性是普通的~:
在这里插入图片描述

Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);  // true!!!

1.2 懒汉模式

1.2.1 单线程版

类加载的时候不创建实例,第一次使用的时候才创建实例:

class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}    

1.2.2 多线程版

上述讲解的饿汉模式和懒汉模式,如果在多线程环境下调用getInstance,是否是线程安全的?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

怎么解决???
使用volatile!!!
volatile 有两个功能:1.解决内存可见性问题;2.禁止指令重排序

代码完全体:
在这里插入图片描述

二、工厂模式

举个例子,高中数学课,我们学过笛卡尔坐标系和极坐标系。我们发现,用代码来构造坐标时,两种方法的参数完全一致:
在这里插入图片描述
在Java标准库里,有线程池:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/118584.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!