黑马程序员技术交流社区

标题: 单例设计模式也叫饿汗式(三种体现的代码体现) [打印本页]

作者: aiheima    时间: 2016-1-7 21:57
标题: 单例设计模式也叫饿汗式(三种体现的代码体现)
单例设计模式(掌握)
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,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象。


作者: sidianban    时间: 2016-1-7 22:27
一直搞不懂单利
作者: aiheima    时间: 2016-1-7 22:45
sidianban 发表于 2016-1-7 22:27
一直搞不懂单利

还有一种叫复利
作者: sidianban    时间: 2016-1-9 00:30
有复利的代码吗
作者: aiheima    时间: 2016-1-9 00:43
我去找找 找到的话 我就发出来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2