• 设计模式之单例模式


    1.定义:

    单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并提供全局访问点。

    2.单例的使用

            教科书中的示例是很简单的,要想实现一个单例类,只需要三点:

        1、定义私有的静态成员

      2、私有化构造方法

         3、提供公有的静态工厂方法

    //单例模式
    public class single {
        private String name;
    	private static single si=null;
    	single(){
    		//this.name=name;
    	}
    	
    	public static single instance(){
    		if(si==null){
    		si=	new single();
    		}
    		return si;
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		single s=single.instance();
    		s.setName("hajsalfhj");
    		//single s1=new single();
    		single s1=single.instance();
    		System.out.println(s.getName()+s.equals(s1));
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    
    }
    

    3.多线程问题

            既然在软件运行期内只有一个实例,由于无法限制client的调用时机,就不可避免要处理互斥问题。

            先来看静态工厂方法的互斥处理,典型的代码是:

        public static Singleton getInstance(){  
            if (instance==null){  
                synchronized (Singleton.class) {  
                    if (instance==null){  
                        instance=new Singleton();  
                    }  
                }  
            }  
            return instance;  
        }  
    

            这段代码既完成了在构造这个唯一实例时的保护,又在构造完以后的多次获取实例时不做无谓的互斥处理以提高运行效率,是目前比较推荐的实现方法。

            再来看类的其他成员的互斥问题,这个就与其他class是一样的了,需要小心的处理多线程访问的影响。

    4.内存回收

            单例的内存问题也是值得关注的,一量单例创建以后,静态变量instance就会持有一份内存引用,而且由于其static性质,这份内存将在程序运行期间持续占用,无法通过GC进行回收。所以对内存敏感的程序要减少对单例的使用,或者妥善处理内存回收问题。

  • 相关阅读:
    美国常青小组:“4+2”,成功的企业的普遍特征
    与你的商业伙伴建立信任关系的12条准则
    成功12级跳:你还是穷人只因为你没有立下成为富人的目标
    生日与谁共
    猎取人心的36条黄金法则
    谢谢你能为我落泪
    要锤炼出营销魔法,口碑营销“无招胜有招”
    怎样成为下一个比尔·盖茨?总结决定他成功的几大要素
    只要你能够幸福
    史玉柱:创业不是靠忽悠,我的最后四个忠告
  • 原文地址:https://www.cnblogs.com/jing58/p/6065514.html
Copyright © 2020-2023  润新知