美文网首页自学Java入门与进阶
Java入门之初识设计模式---单列模式

Java入门之初识设计模式---单列模式

作者: kakarotto | 来源:发表于2018-08-01 23:05 被阅读3592次

    设计模式

    是软件开发人员在软件开发过程中面临的一般问题的解决方案

    单例模式

    目的:使得类的一个对象成为该类系统中的唯一实例

    定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供

    因此,设计要点是:

    1. 某个类只能有一个实例

    2. 必须自行创建实例

    3. 必须自行向整个系统提供这个实例

    实现:

    1. 只提供私有的构造方法

    2. 含有一个该类的静态私有对象

    3. 提供一个静态的公有方法用于创建、获取静态私有对象

    代码实现方案:

    1. 饿汉式

    2. 懒汉式

    饿汉式

    类加载时,静态实例对象完成了实例化操作;空间换时间。(对象创建过程中实例化)

    饿汉式线程安全

    新建文件SingletonOne.java

    /**
    * 饿汉式
    */
    public class SingletonOne {
        //1.创建类中的私有构造函数
        private SingletonOne(){
    
        }
        //2.创建该类型的私有静态实例
        private static SingletonOne instance = new SingletonOne();
        //3.创建公有静态方法返回静态实例对象
        public static SingletonOne getInstance(){
            return instance;
        }
    }
    

    新建文件Test.java

    public class Test {
        public static void main(String[] args) {
            SingletonOne one = SingletonOne.getInstance();
            SingletonOne two = SingletonOne.getInstance();
            System.out.println(one);
            System.out.println(two);
        }
    }
    

    输出结果可以看到是同一个类的地址。

    懒汉式

    类加载时并未实例化,第一次使用时才进行实例化;时间换空间。(静态公有方法中实例化)

    懒汉式存在线程风险

    懒汉式线程安全的解决方案:(此处大致介绍下,后边在线程篇会详细介绍)

    • 同步锁

    • 双重校验锁

    • 静态内部类

    • 枚举

    新建文件:SingletonOne.java

    public class SingletonTwo {
        //1.创建私有构造方法
        private SingletonTwo(){
    
        }
        //2.创建静态的该类实例对象
        private static SingletonTwo instance = null;
        //3.创建开放的静态方法提供实例对象
        public static SingletonTwo getInstance(){
            if(instance == null)
                instance = new SingletonTwo();
            return instance;
        }
    }
    

    新建文件Test.java

    public class Test {
        public static void main(String[] args) {
            SingletonTwo one = SingletonTwo.getInstance();
            SingletonTwo two = SingletonTwo.getInstance();
            System.out.println(one);
            System.out.println(two);
        }
    }
    

    输出结果同上饿汉式代码

    单列模式的特点以及应用场景

    优点:

    • 在内存中只有一个对象,节省内存

    • 避免频繁的创建和销毁对象,提高性能

    • 避免对共享资源的多重占用

    缺点:

    • 扩展比较困难

    • 如果实例化后的对象长期不利用,系统将默认认为垃圾,进行回收,造成对象状态丢失

    使用场景:

    1. 创建对象时占用资源过多,但同时又需要用到该类对象

    2. 对系统内资源要求统一读写,如读写配置信息

    3. 当多个实例存在可能引起程序逻辑错误,如号码生成器

    相关文章

      网友评论

        本文标题:Java入门之初识设计模式---单列模式

        本文链接:https://www.haomeiwen.com/subject/rbydvftx.html