java入门(二十六) | 设计模式之单例设计

java入门(二十六) | 设计模式之单例设计

设计模式

软件设计模式又称为设计模式,是一套被反复利用、经过分类的、代码设计经验的总结。
使用设计模式是为了可重用代码让代码更容易的被人理解,保证代码的可靠性、程序的重用性
Java中有23种设计模式,常见的设计模式有:单例设计模式、工厂模式、代理模式、策略模式、委托模式、责任链模式等。

1.1 单例设计模式概念

单例模式可以说是大多数开发人员在实际中使用最多的.
常见的Spring默认创建的bean就是单例模式的。
单例模式有很多好处,比如可节约系统内存空间,控制资源的使用
其中单例模式最重要的是确保对象只有一个。
简单来说,保证一个类在内存中的对象就一个。
RunTime就是典型的单例设计,我们通过对RunTime类的分析,一窥究竟。

1.2 源码解析

/**
 * Every Java application has a single instance of class
 * <code>Runtime</code> that allows the application to interface with
 * the environment in which the application is running. The current
 * runtime can be obtained from the <code>getRuntime</code> method.
 * <p>
 * An application cannot create its own instance of this class.
 *
 * @author  unascribed
 * @see     java.lang.Runtime#getRuntime()
 * @since   JDK1.0
 */
RunTime.java
package java.lang;
 
public class Runtime {
    //1、创建静态的全局唯一的对象
    private static Runtime currentRuntime = new Runtime();
 
    //2、私有构造方法,不让外部来调用
    /** Don"t let anyone else instantiate this class */
    private Runtime() {}
 
    //3、通过自定义的静态方法获取实例
    public static Runtime getRuntime() {
        return currentRuntime;
    }
}

1.3 饿汉式

package cn.qile.design;

//测试单例设计模式:减少对象的创建次数,保证整个项目中只有一个类的实例
public class Test1_Singleton {
    public static void main(String[] args) {
        //TODO 测试真的只有一个对象吗???
        Single s = Single.getSingle();
        System.out.println(s);//地址值,cn.qile.design.Single@12a3a380

        //TODO 测试真的只有一个对象吗???
        Single s2 = Single.getSingle();
        System.out.println(s2);//地址值,cn.qile.design.Single@12a3a380

        // == 默认比较的是对象的地址值,如果地址值相同返回true,也就是同一个对象
        // == 比较基本类型数据时,比较的是数据的值。
        // == 比较引用类型时,比较的是地址值。
        System.out.println(s==s2);//true

    }
}
//创建Single类
class Single{
    //1、私有化构造方法  -- 目的是不让外界随便new
    private Single() {}
    //2、在类的内部创建对象
    //static是因为getSingle()是静态的 调用的 只能是 静态资源
    static private Single s = new Single();

    //3、提供供的get(),把创建好的对象,返回调用位置
    //static是因为外界new不了了,只能通过类名.调用了
    static public Single getSingle(){
        return s;
    }
}

1.4 懒汉式

package cn.qile.design;

//测试单例设计模式:减少对象的创建次数,保证整个项目中只有一个类的实例
public class Test1_Singleton {
    public static void main(String[] args) {
        //TODO 测试真的只有一个对象吗???
        Single s = Single.getSingle();
        System.out.println(s);//地址值,cn.qile.design.Single@12a3a380

        //TODO 测试真的只有一个对象吗???
        Single s2 = Single.getSingle();
        System.out.println(s2);//地址值,cn.qile.design.Single@12a3a380

        // == 默认比较的是对象的地址值,如果地址值相同返回true,也就是同一个对象
        // == 比较基本类型数据时,比较的是数据的值。
        // == 比较引用类型时,比较的是地址值。
        System.out.println(s==s2);//true

    }
}
//创建Single类
class Single{
    //1、私有化构造方法  -- 目的是不让外界随便new
    private Single() {}
    //2、在类的内部创建对象
    //static是因为getSingle()是静态的 调用的 只能是 静态资源
    static private Single s = null;

    //3、提供供的get(),把创建好的对象,返回调用位置
    //static是因为外界new不了了,只能通过类名.调用了
    static public Single getSingle(){
        //懒汉式:线程安全问题
        if(s == null) {
            s = new Single();
        }
        return s;
    }
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java入门(二十六) | 设计模式之单例设计