读书人

Java 设计方式之单列模式

发布时间: 2012-11-15 15:16:14 作者: rapoo

Java 设计模式之—单列模式

    package design.Singleton;/*********************************************************************** * * Singleton2.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Jan 26, 2010 4:34:51 PM * @revision $Id: * ***********************************************************************/public class Singleton2 {private static Singleton2 singleton2 = new Singleton2();private Singleton2(){}public static Singleton2 getInstance(){return singleton2;}}

    ?? 2:懒汉式单利类

    ?

      package design.Singleton;/*********************************************************************** * * Singleton1.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Jan 26, 2010 4:32:04 PM * @revision $Id: * ***********************************************************************/public class Singleton1 {private static Singleton1 ingleton1;private Singleton1(){}public static synchronized Singleton1 getInstance(){if(null==ingleton1){ingleton1= new Singleton1();}return ingleton1;}}

      ? 3:同步安全单列类

      ?

        package design.Singleton;/*********************************************************************** * * Singleton3.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Jan 26, 2010 4:36:34 PM * @revision $Id: * ***********************************************************************/public class Singleton3 {private static Singleton3 singleton3;private Singleton3() {}public static synchronized Singleton3 getInstance() {if (null == singleton3) {synchronized (Singleton3.class) {if (null == singleton3) {singleton3 = new Singleton3();}}}return singleton3;}}

        ?下面用测试代码说明 只创建一个类

        ?? Message (辅助类)

        ?

          package design.Singleton;/*********************************************************************** * * Message.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Jan 26, 2010 4:47:32 PM * @revision $Id: * ***********************************************************************/public class Message {private String str;public String getStr() {return str;}public void setStr(String str) {this.str = str;}}

          ??? 测试类

          ?

            package design.Singleton;import java.util.ArrayList;import java.util.List;/*********************************************************************** * * test.java * @copyright Copyright: 2009-2012 * @creator 周辉<br/> * @create-time Jan 26, 2010 4:39:48 PM * @revision $Id: * ***********************************************************************/public class test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubList<Singleton3> list = new ArrayList<Singleton3>();for (int i=0;i<5;i++){Singleton3 s1=Singleton3.getInstance();if(!list.contains(s1)){list.add(s1);}}List<Message> list2 = new ArrayList<Message>();for (int i=0;i<5;i++){Message m= new Message();if(!list2.contains(m)){list2.add(m);}}System.out.println("size"+list.size());for (Singleton3 s:list){System.out.println("hashcode"+s.hashCode());}System.out.println("size2"+list2.size());for (Message s:list2){System.out.println("hashcode2"+s.hashCode());}}}

            ??? 测试结果分析Singleton3 只创建一个类? list 个数只有一个(如果放开代码 if(!list.contains(s1)){ )显示hashcode 值相同 而Message 创建5个对象 list个数为5个 hashcode值分别不相同。

            ??? 所以 单列类只创建一个实例

读书人网 >软件开发

热点推荐