黑马程序员技术交流社区

标题: 请帮忙结合代码讲解一下单例设计模式的原理 [打印本页]

作者: 想要那片海    时间: 2015-5-3 21:33
标题: 请帮忙结合代码讲解一下单例设计模式的原理
本帖最后由 想要那片海 于 2015-5-4 18:42 编辑

单例设计模式一般都是在什么情况下使用?
作者: 唐泉银    时间: 2015-5-4 17:08
好吧 ,我貌似也不知道
作者: liquid1993    时间: 2015-5-4 18:00
单例设计模式是一种很常见的设计模式
单例设计模式有懒汉式与饿汉式
一、先说一说单例设计模式的特点:
1.单例设计模式保证一个类只有一个实例。
2.要提供一个访问该类对象实例的全局访问点。
二、单例设计模式要点
     对一些类来说,只有一个实例是很重要的。例如很多时候对于某个系统只需要拥有一个全局对象,这样有利于我们协调系统的整体行为。
再比如说某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象
再通过这个单例对象获取这些配置信息。从而简化了在比较复杂的环境下配置管理。
     通过上面的介绍,我们可以知道单例模式最重要的就是要保证一个类只有一个实例并且这个类易于被访问,那么要怎么做才能保证一个类具有一个实例呢?一个全局变量使得一个对象可以被访问,但是这样做却不能防止你实例化多个对象。
一个更好的办法就是,让该类自身负责保存它的唯一实例。并且这个类保证没有其他的实例可以被创建。
怎样保证一个对象的唯一总结如下:
>>1.为了避免其它程序过多的建立该类的对象,先禁止其它程序建立该类对象实例(将构造器私有化)
>>2.为了方便其它程序访问该类的对象,只好在本类中自定义一个对象,由1可知该对象是static的,并对外提供访问方式。
三、分析举例
在JAVA中单例设计模式
1. 饿汉式如下所示
class Single
{
        //保存该类对象的一个实例,饿汉式的做法即在声明的同时初始化该对象
        private static final Single s = new Single();
        //将构造函数私有化,不对外提供构造函数
        private Single(){}
        //向外提供访问该类对象的方法
        public static Single getInstance()
        {
                return s;
        }
}
2.多线程下懒汉式如下所示
class Single
{
        private static Single s = null;
        private Single(){}


        public static  Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)
                        {
                                if(s==null)
                                        s = new Single();
                        }
                }
                return s;
        }
}
注意懒汉式一定要加锁,不然不会保证对象唯一。
>>1.饿汉式这种方式加载类对象,我们称作:预先加载方式。
>>2.懒汉式这种方式加载类对象,我们称作:延迟加载方式。

作者: 想要那片海    时间: 2015-5-4 18:41
liquid1993 发表于 2015-5-4 18:00
单例设计模式是一种很常见的设计模式
单例设计模式有懒汉式与饿汉式
一、先说一说单例设计模式的特点:

:victory:很详细,谢啦
作者: an_lucas    时间: 2015-5-4 19:45
liquid1993 发表于 2015-5-4 18:00
单例设计模式是一种很常见的设计模式
单例设计模式有懒汉式与饿汉式
一、先说一说单例设计模式的特点:

好详细~~~~
作者: liquid1993    时间: 2015-5-4 20:42
想要那片海 发表于 2015-5-4 18:41
很详细,谢啦

没事  学会就好 常交流




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