设计模式--单例模式

来源:互联网 发布:万能五笔 for mac os 编辑:程序博客网 时间:2024/05/29 10:10

单例模式(Singleton)

如果一个军队有多个司令员同时指挥,我们听谁的?单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类是(司令部)核心类,控制着整个流程,如果该类(司令部)有多个,这个流程就乱了,只有使用单例模式,才能保证整个命令流程独立运行。首先我们写一个简单的单例类程序:public class Singleton { private static Singleton uniqueInstance = null; private Singleton() { // Exists only to defeat instantiation. } public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } // Other methods...}public class TestStream { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //该类只能有一个实例 private TestStream(){} //私有无参构造方法 //该类必须自行创建 //有2种方式 /*private static final TestStream ts=new TestStream();*/ private static TestStream ts1=null; //这个类必须自动向整个系统提供这个实例对象 public static TestStream getTest(){ if(ts1==null){ ts1=new TestStream(); } return ts1; } public void getInfo(){ System.out.println("output message "+name); } }public class TestMain { public static void main(String [] args){ TestStream s=TestStream.getTest(); s.setName("尼古拉特斯拉"); System.out.println(s.getName()); TestStream s1=TestStream.getTest(); s1.setName("尼古拉特斯拉"); System.out.println(s1.getName()); s.getInfo(); s1.getInfo(); if(s==s1){ System.out.println("创建的是同一个实例"); }else if(s!=s1){ System.out.println("创建的不是同一个实例"); }else{ System.out.println("application error"); } } }
输出结果:
尼古拉特斯拉
尼古拉特斯拉output message 尼古拉特斯拉output message 尼古拉特斯拉

0 0