【笔试】20、单例模式

来源:互联网 发布:mac双系统卸载win7 编辑:程序博客网 时间:2024/04/30 04:56

题目:设计一个类,我们只能生成该类的一个实例


一般解法


/** *题目:设计一个类,我们只能生成该类的一个实例 *时间:2015年8月24日10:19:39 *文件:Singleton.java *作者:cutter_point */package bishi.Offer50.y2015.m08.d24;public class Singleton{private static Singleton sl = null;private Singleton(){}public static Singleton Instance(){if(sl == null)sl = new Singleton();return sl;}public static void main(String[] args){}}

考虑多线程


/** *题目:设计一个类,我们只能生成该类的一个实例,当运用到多线程的时候 *时间:2015年8月24日10:19:39 *文件:Singleton.java *作者:cutter_point */package bishi.Offer50.y2015.m08.d24;public class Singleton2{private static Singleton2 s2 = null;private Singleton2(){}public static synchronized Singleton2 Instance()//加锁耗费资源{if(s2 == null)s2 = new Singleton2();return s2;}public static void main(String[] args){// TODO Auto-generated method stub}}

优化多线程


/** *题目:设计一个类,我们只能生成该类的一个实例,当运用到多线程的时候,优化代码 *时间:2015年8月24日10:53:43 *文件:Singleton3.java *作者:cutter_point */package bishi.Offer50.y2015.m08.d24;public class Singleton3{private static Singleton3 s3 = null;private Singleton3(){}public static Singleton3 Instance(){if(s3 == null){//上锁synchronized(Singleton3.class){s3 = new Singleton3();}//synchronized}return s3;}}

简单可行的方法实现

/** *题目:设计一个类,我们只能生成该类的一个实例,当运用到多线程的时候,优化代码,利用静态创建 *时间:2015年8月24日10:53:43 *文件:Singleton4.java *作者:cutter_point */package bishi.Offer50.y2015.m08.d24;public class Singleton4{private static Singleton4  s4 = new Singleton4();private Singleton4(){}public static Singleton4 Instance(){return s4;}}

按需生成单例,不需要的时候不创建

/** *题目:设计一个类,我们只能生成该类的一个实例,当运用到多线程的时候,优化代码,利用静态创建,但是静态创建的话,我们有时候不需要也会创建这个实例 *我们按需创建实例的话,我们可以借助一个内部类创建 *时间:2015年8月24日10:53:43 *文件:Singleton4.java *作者:cutter_point */package bishi.Offer50.y2015.m08.d24;public class Singleton5{private Singleton5(){}private static class Nested{public static Singleton5 S5 = new Singleton5();}public static Singleton5 Instance(){//得到单例return Nested.S5;}}








0 0