首页 > 其他 > 详细

设计模式-单例模式

时间:2016-04-10 02:08:25      阅读:205      评论:0      收藏:0      [点我收藏+]

单例模式:? 是一个比较简单的模式(类只有一个实例,而且自己实例化并向整个系统提供这个实例)

?

单利模式统一代码:(通过使用private构造函数确保在一个英语中只产生一个实例,并且是自己实例化的),代码如下:

public class Singleton{
                private static final Singleton  singleton=new Singleton();
                //限制产生多个对象
                private Singleton(){}
                //通过这个方法获得实例对象
                public static Singleton getSingleton(){
                      return singleton;

                 }
                //类里面的其他方法,尽量使static
                public static void doSomething(){

                }

}

?

单例模式的使用场景:

1》要求生成唯一的序列号的环境;

2》在整个项目里面需要一个共享访问点或共享数据;

3》创建一个对象需要消耗的资源过多,如果要访问IO和数据等资源;

4》需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单利模式(当然,也可以直接声明为static的方式);

?

?

单例模式的注意事项:

单例模式有很多种实现方法,开始给出的通用代码不会出现线程同步问题,但是下面的方法就需要考虑线程同步问题:

public class Singleton{
       private static Singleton singleton=null;
       //限制生成多个对象
        private Singleton(){
        }
        //通过该方法获得实例对象
        public static Singleton getSingleton(){
               if(singleton==null){
                        singleton=new Singleton();
                }
               return singleton;       
          }
}

?这个模式在低并发的情况下不会出现问题,但是并发量增多的时候边可能会在内存里面出现多个实例,破坏我们的预想,,,这个时候我们便需要在getSingleton()方法前面加synchronized关键字;

public class Singleton{
       private static Singleton singleton=null;
       //限制生成多个对象
        private Singleton(){
        }
        //通过该方法获得实例对象
         //利用synchronized 关键字来实现线程安全,也就是锁定这个方法,在这个方法在运行
         //的时候,不允许被其他调用,直到当前对象调用完成,其他调用才会继续运行
        public static Singleton synchronized getSingleton(){
               if(singleton==null){
                        singleton=new Singleton();
                }
               return singleton;       
          }
}

?

?

?

设计模式-单例模式

原文:http://qq-24665727.iteye.com/blog/2289771

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!