DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

设计模式——单例模式

  • 设计模式——单例模式

  • 已被浏览: 68 次2020年12月08日    来源:  https://www.cnblogs.com/pgrightwu/p/14105497.html
  • 单例模式:一个类只能有一个实例(只能创建出一个对象),为了节省内存资源怎么保证只有一个实例?我们知道,当创建一个新对象时,我们会调用类的构造方法,创建多个对象,那我们就会调用多次构造方法,现在我们要保证只有一个实例,也就是说我们不管创建多

    单例模式:一个类只能有一个实例(只能创建出一个对象),为了节省内存资源

    怎么保证只有一个实例?

    我们知道,当创建一个新对象时,我们会调用类的构造方法,创建多个对象,那我们就会调用多次构造方法,现在我们要保证只有一个实例,也就是说我们不管创建多少个对象,都只调用一次构造方法,那么怎么实现呢?我们可以给构造方法加上private修饰符,这样构造方法就只能被本类访问了,其他地方你要创建类对象,要访问构造方法就会被拒绝,但是这样的话在其他类要创建对象时就不能使用当前类对象了,所以为了解决这个问题,可以对外提供一个公共方法返回一个对象。

    总结一下就是:

    1. 构造方法私有化

    2. 对外提供一个公共方法返回一个对象

    代码实现:

    /**
     * @author PgRightWu
     * @version 1.0
     * @date 2020/12/8 16:42
     * @description  单例模式
     */
            /*
            * 单例模式步骤
            * 1.构造方法私有化
            * 2.对外提供公共方法返回一个对象
            * */
    public class Singleton {
    //    1.构造私有化
        private Singleton(){}
    //    饿汉式(一开始就创建)
        private static Singleton s = new Singleton();
    //    2.对外提供私有方法保证返回一个对象(因为外部调用类的方法要实例化对象,所以用static修饰,可以通过类名调用)
        public static Singleton getSingleton(){
            return s;
        }
    
    }
    class TestSingleton{
        public static void main(String[] args) {
            Singleton s1 = Singleton.getSingleton();
            Singleton s2 = Singleton.getSingleton();
            Singleton s3 = Singleton.getSingleton();
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
    
        }
    }
    

    这样的话,不管创建多少个Singleton对象,都是指向同一个内存地址,也就是只有一个实例

    运行效果:在这里插入图片描述

    采用懒汉式实现单例模式,其实也很简单,懒汉式就是什么时候用就什么时候创建对象

    实现代码:

    public class Singleton {
    //    1.构造私有化
        private Singleton(){}
    //    懒汉式(什么时候用什么时候创建)
        private static Singleton s;
    //    2.对外提供私有方法保证返回一个对象(因为外部调用类的方法要实例化对象,所以用static修饰,可以通过类名调用)
        public static Singleton getSingleton(){
            if(s==null)
                s = new Singleton();
            return s;
        }
    
    }
    

    现在我们来聊一聊单例模式饿汉式与懒汉式的区别

    • 饿汉式是在类加载时就进行实例化,而懒汉式默认不会实例化,是什么时候new什么时候才实例化
    • 饿汉式是线程安全的,因为在类加载时对象就已经实例化了,而懒汉式不是线程安全的,是什么时候用就什么时候实例化,这样当多个线程同时需要实例化某个对象时,访问实例化代码,就会生成多个对象,所以是线程不安全的(可以通过同步锁解决)。
    • 饿汉式是在类加载时实例化对象,所以会占用内存空间,造成内存空间的浪费,而懒汉式是什么时候用什么时候实例化对象,相对不会造成内存浪费。

    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:模式

  • 上一篇:Linux网络数据转发平面的变迁
  • 与“设计模式——单例模式”相关的资讯
  • 前瞻:日化行业如何运用“私域营销”做好DTC模式升级
  • “一学就会,一做就废”微服务的架构模式:一个服务一个数据库模式
  • 面试官问,你使用过命令模式吗?我笑了!
  • 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!
  • 以游戏玩家的视角开启设计模式