设计模式之单例设计模式

程序在运行时候,通常会生成很多实例。但是我们想在程序中某个东西只存在一个时,就会有“只创建1个实例的需求”。像这样确保只生成一个实例的模式被称之为Singleton模式。即单例设计模式。这个模式必须保证2点。

1、确保任何情况下都绝对只有1个实例。

2、想在程序中表现出“只存在一个实例”。

接下来我们创建一个名字为Singleton的类。

package DesignPattern;
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){
        //在这里要将singleton的构造函数设置为private,这是为了,如果从这个类的外部我们调用这个类的构造函数(new Singleton())
        //的话就会报错,错误如下:Error:(6, 26) java: Singleton() 在 DesignPattern.Singleton 中是 private 访问控制
        //是给程序员不小心在此模式中用了new 类名()来创建实例的一个提醒,当然程序员可以用getInstance方法来获取实例
        //为了保证任何情况下都只能生成一个实例,我们将此构造方法设置为private。
        System.out.println("只生成了我这一个实例  实例1号");
    }
    public static Singleton getInstance(){
        return singleton;
    }
}

接下来我们创建一个Main类,来测试。代码如下:

class Main{
    public static void main(String[] args) {
        System.out.println("程序开始运行");
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        //调用getInstance来获取2个Singleton的实例
        //通过判断obj1和obj2是否相等来确认是否为同1个实例
        if (obj1==obj2){
            System.out.println("obj1和obj2是同一个实例");
        }else {
            System.out.println("obj1和obj2是不同的实例");
        }
        System.out.println("程序运行结束");
    }
}

代码运行的结果如下:

程序开始运行
只生成了我这一个实例  实例1号
obj1和obj2是同一个实例
程序运行结束

------------------------------------

我们发现,obj1和obj2其实是1个实例,这个实例就是在我们第一次调用getInstance方法时,Singleton类被初始化时,

 private static Singleton singleton = new Singleton();  //调用了私有的构造方法,打印 实例1号

static字段singleton被初始化,生成了一个唯一的实例!

单例设计模式使用注意2点:1、我们要定义获取实例的方法时,要设置为static,让它在类初始化时候,就只生成这1个实例

                                           2、为了防止不小心使用new 类名()方法创建实例,我们将构造函数设置成为了private。


猜你喜欢

转载自blog.csdn.net/Akanarika520/article/details/80209796