zoukankan      html  css  js  c++  java
  • java设计模式:单例模式

    设计模式是什么?

      设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。

    设计模式最经常被使用的,比较重要的就是单例模式、抽象工厂模式、工厂模式以及代理模式。

    这一篇主要写的是设计模式的单例模式:

      单例模式:只允许被实例化出来一个对象,即内存只存在一个类的对象,就叫做单例模式。

      将一个类的构造方法设置为私有的,然后对外提供一个公共的可以调用该类私有构造方法的接口方法。‘

      其实单例模式就是限制外部类不能随意访问本类里边的的构造方法,从而实现外部类不能够随意实例化本类对象的目的, 则一个类要调用单例模式的话,就需要将该类的构造方法设计为私有的,为了让外部类可以实例化出来一个该类的对象,就需要给外部类提供一个可以访问到本类私有构造方法的对外方法。

      单例模式的应用体现:电脑的任务栏,只能创建一个,当有一个任务栏时,再创建仍是展示之前的任务栏。

      单例模式的设计分两种:

        饿汉模式

        懒汉模式

    /**
     * 饿汉式设计模式
     * 在类加载的时候,就将类的对象实例化出来,放在内存里,在用户使用的时候直接调用
     * 特点:
     * 因为在类加载的时候,就已经实例化了对象,所以内存里会一直有这个对象,占用内存空间,
     * 同样因为已经实例化了对象,所以调用时不需要在创建对象,所以效率较高点。
     */
    public class HungryDemo {
        /*static修饰为全局变量,在内存中只存在一个该变量的对象*/
        private static HungryDemo hungryDemo = new HungryDemo();
        private HungryDemo(){}
    
        /*对外提供该类对象的接口*/
        public static HungryDemo getBean() {
            return hungryDemo;
        }
    }

      

    /**
     * 懒汉式单例模式
     * 在类被加载的时候,没有实例化对象,当用户需要使用对象的时候,才实例化对象
     * 特点:
     * 在类被加载的时候,内存里没有该类的对象,所以会节省内存空间,
     * 但是当用户使用的时候,因为还需要先去实例化对象,所以效率相对而言低
     */
    public class StarvingDemo {
        /*创建一个全局变量赋值为空*/
        private static StarvingDemo s = null;
    
        private StarvingDemo() {
        }
    
        public static StarvingDemo getBean() {
            /*判断对象是否被实例化,如果已经实例化,就返回该对象,否则就实例化对象*/
            if (s != null) {
                System.out.println("对象已经被实例化");
                return s;
            }
            return s= new StarvingDemo();
        }
    
    }

    测试创建对象是否为单例对象:

    public class Demo1 {
        public static void main(String[] args) {
            HungryDemo bean = HungryDemo.getBean();
            HungryDemo bean1 = HungryDemo.getBean();
            System.out.println(bean == bean1);
    
            StarvingDemo bean2 = StarvingDemo.getBean();
            StarvingDemo bean3 = StarvingDemo.getBean();
            System.out.println(bean2 == bean3);
        }
    }

    单例模式的应用场景:

      1.在应用场景中,某类对象只要求生成一个对象的时候,如:任务管理器,聊天窗口,office文件等。

      2.当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如web中的配置对象,数据库的连接池等。

      3.当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池,网络连接池等。

  • 相关阅读:
    SQL Server-数据库架构和对象、定义数据完整性(二)
    SQL Server-语句类别、数据库范式、系统数据库组成(一)
    ASP.NET WebAPi之断点续传下载(下)
    ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
    ASP.NET WebAPi之断点续传下载(中)
    ASP.NET WebAPi之断点续传下载(上)
    ASP.NET WebAPi(selfhost)之文件同步或异步上传
    JSTL fn:contains()函数
    用jstl标签判断一个字符串是否包含了另一个字符串
    fn:replace()函数
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11140579.html
Copyright © 2011-2022 走看看