单例模式、
- 一、单例模式
- 1.1 饿汉模式
- 1.1.1 实现
- 1.1.2 补充
 
- 1.2 懒汉模式
- 1.2.1 单线程版
- 1.2.2 多线程版
 
 
- 二、工厂模式
一、单例模式
单例模式是校招中最常考的设计模式之一。
啥是设计模式?
设计模式好比象棋中的"棋谱":红方当头炮,黑方马来跳… 针对红方的一些走法,黑方应招的时候有一些固定的套路,按照套路来走局势就不会吃亏。
软件开发中也有很多常见的"问题场景",针对这些问题场景,大佬们总结出了一些固定的套路,按照这个套路来实现代码,也不会吃亏。
单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例!
这一点在很多场景上都需要,比如 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标准库里,有线程池:
 




![[附源码]计算机毕业设计基于JEE平台springbt技术的订餐系统Springboot程序](https://img-blog.csdnimg.cn/7a2bf676d98443b8a8a3ba586da9412a.png)














