模式的秘密一(单例模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mayong1234567/article/details/82386715

前言

模式设计,是我们设计代码与编写程序的结晶,前人栽树后人乘凉,给了我们更加明确的编程思维,从今日起,本人将陆续介绍不同的模式

单例模式

在我们日常生活中,有很多非常独特的类,他们只能存在一个对象,如:皇帝,配偶(当然非洲某些部落就不说了),某一公司的总裁等等,一个类中,只能存在一个实体.

分类

单例模式分为:饿汉模式和懒汉模式
单例模式: 在外部不能直接生成类,在类的内部可以声明一个类,这样就可以限制在外部无法声明.起到了限制的作用
饿汉模式: 在类的内部直接声明并赋值变量,如果谁用,直接取到就可以
懒汉模式: 类加载的过程中,只是定义类,并没有声明. 而是在方法中能够定义类.
具体代码如下所示!
饿汉模式:

package com.imooc;
/*
 * 单例模式,有些时候,对象只需要一个就足够了.古代皇帝,老婆
 * 保证每个程序某个实例有且只有一个.
 * 类型,俩种,饿汉模式,懒汉模式.
 */
public class Singleton {
    //将其设置成为私有的方法.不允许外部直接创建对象.

    private Singleton(){

    }
    //自己创建类的实例,而且是唯一的
    // 只要类加载了,这个私有类就加载了.不管你有没有用我,我直接就在这里了.
    private static Singleton instence = new Singleton();
    //提供一个获取类名的方法
    public static Singleton getInstence()
    {
        //这里既可以用new Singleton ,也可以用instence ,但是为了确保唯一性,只能用instence

        return instence;
    }

}

懒汉模式:

public class Singleton {
    //将其设置成为私有的方法.不允许外部直接创建对象.

    private Singleton(){

    }
    //自己创建类的实例,而且是唯一的
    // 只要类加载了,这个私有类就加载了.不管你有没有用我,我直接就在这里了.
    private static Singleton instence ;
    //提供一个获取类名的方法
    public static Singleton getInstence()
    {
        //这里既可以用new Singleton ,也可以用instence ,但是为了确保唯一性,只能用instence
        if(instence==null)
        {
            instence=new Singleton();
        }
        return instence;
    }

}

知识拓展:
在这俩个代码中,我们采用单例模型,在类中,只声明了一个对象,那么如果现实中,如果有需要,我们也可以限定多个对象,如 国王和王后, 那么代码就可以这样:

package com.imooc;
/*
 * 单例模式,有些时候,对象只需要一个就足够了.古代皇帝,老婆
 * 保证每个程序某个实例有且只有一个.
 * 类型,俩种,饿汉模式,懒汉模式.
 */
public class Singleton {
    //将其设置成为私有的方法.不允许外部直接创建对象.

    private Singleton(){

    }
    //自己创建类的实例,而且是唯一的
    // 只要类加载了,这个私有类就加载了.不管你有没有用我,我直接就在这里了.
    private static Singleton instence1 = new Singleton();
    private static Singleton instence2 = new Singleton();
    //提供一个获取类名的方法
    public static Singleton getInstence1()
    {
        //这里既可以用new Singleton ,也可以用instence ,但是为了确保唯一性,只能用instence

        return instence1;
    }
      public static Singleton getInstence2()
    {
        //这里既可以用new Singleton ,也可以用instence ,但是为了确保唯一性,只能用instence

        return instence2;
    }


}

如有问题,请多指导!!

猜你喜欢

转载自blog.csdn.net/mayong1234567/article/details/82386715