前言

简介

💻 时间稍纵即逝,从后面的文章开始就要开始正式的java设计模式学习了,如有不懂的可以留言哦.

详细讲解

单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

两种类型

懒汉式单例模式

该模式包含2种常见的类型,分别是懒汉式单例模式(其特点是类加载时没有生成单例,
只有当第一次调用getInstance方法时才去创建这个单例)

饿汉式单例模式

饿汉式单例模式(其特点是类一旦加载就创建一个单例,
保证在调用getInstance方法之前单例已经存在了)。

学习要求

  1. 用懒汉式单例模式模拟产生美国当今总统对象
    
  1. 用饿汉式单例模式模拟产生猪八戒对象

懒汉式单例模式

懒汉式代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package chapter02.singleton;
public class SingletonLazy {
public static void main(String[] args) {
President zt1 = President.getInstance();
zt1.getName();// 输出总统的名字
President zt2 = President.getInstance();
zt2.getName();// 输出总统的名字
if (zt1 == zt2) {
System.out.println("他们是同一人!");
}else {
System.out.println("他们不是同一人!");
}
}
}
class President{
private static volatile President instance=null;//保证instance在所有线程中同步
private President(){ System.out.println("产生一个总统!"); } //private避免类在外部被实例化
public static synchronized President getInstance(){ //在getInstance方法上加同步
if(instance==null){
instance=new President();
}else {
System.out.println("已经有一个总统,不能产生新总统!");
}
return instance;
}
public void getName() {
System.out.println("我是美国总统:特朗普。");
}
}

懒汉式类图

懒汉式

饿汉式单例模式

饿汉式代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package chapter02.singleton;
import java.awt.*;
import javax.swing.*;
public class SingletonEager {
public static void main(String[] args) {
JFrame jf = new JFrame("饿汉单例模式测试");
jf.setLayout(new GridLayout(1,2));
Container contentPane = jf.getContentPane();
Bajie obj1 = Bajie.getInstance();
contentPane.add(obj1);
Bajie obj2 = Bajie.getInstance();
contentPane.add(obj2);
if (obj1 == obj2) {
System.out.println("他们是同一人!");
}else {
System.out.println("他们不是同一人!");
}
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}
class Bajie extends JPanel{
private static Bajie instance=new Bajie();
private Bajie(){
JLabel l1 = new JLabel(new ImageIcon("src/chapter02/singleton/Bajie.jpg"));
this.add(l1);
}
public static Bajie getInstance(){
return instance;
}
}


懒汉式类图

懒汉式

代码运行

通过上面的学习,到了代码运行的结果了;如果你觉得有用,请给我多多支持!
懒汉式