A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

单例设计模式(掌握)
A、单例设计模式:保证类在内存中只有一个对象。
B、如何保证类在内存中只有一个对象呢?
        (1)控制类的创建,不让其他类来创建本类的对象,私有构造方法。private
        (2)在本类中定义一个本类的对象。Singleton s;
        (3)提供公共的访问方式。  public static Singleton getInstance(){return s}
C、单例写法两种:
        (1)饿汉式 开发用这种方式。
        class Singleton {
        //1,私有构造函数
        private Singleton(){}
        //2,创建本类对象
        private static Singleton s = new Singleton();
        //3,对外提供公共的访问方法
        public static Singleton getInstance() {
                return s;
        }
}
        (2)懒汉式 面试写这种方式。存在多线程的问题,可用同步代码块解决。
// 懒汉式,单例的延迟加载模式
class Singleton {
        // 1,私有构造函数
        private Singleton() {
        }
        // 2,声明一个本类的引用
        private static Singleton s;
        // 3,对外提供公共的访问方法
        public static Singleton getInstance() {
                if (s == null)
                        // 线程1,线程2
                        s = new Singleton();
                return s;
        }
}
同步代码解决:
class Ins{
        private  Ins(){}
                private static Ins s ;
                public static Ins getIns() {
                        if (s==null) {
                                synchronized(Ins.class){
                                        if (s == null) {
                                                s = new Ins();
                                        }
                                }
                        }
                        return s;
                }
        (3)第三种格式
         
        class Singleton {
private Singleton() {}
                //final是最终的意思,被final修饰的变量不可以被更改
                public static final Singleton s = new Singleton();
}
D: 饿汉式和懒汉式的区别
a,饿汉式是空间换时间,懒汉式是时间换空间
b,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象。

4 个回复

倒序浏览
一直搞不懂单利
回复 使用道具 举报

还有一种叫复利
回复 使用道具 举报
有复利的代码吗
回复 使用道具 举报
我去找找 找到的话 我就发出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马