Java单例模式示例
Java单例模式是Java中一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点:1、单例类只能有一个实例。2、单例类自己自己创建自己的唯一实例。3、单例类给所有其他对象提供这一实例。
懒汉式单例模式是一种常用的单例模式,下面是一个懒汉式单例模式的示例代码:
```java
public class TestStream {
private String name; // 姓名
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 1,该类只能有一个实例
private TestStream() {} // 私有无参构造方法
// 2,该类自行创建
// 2种方式
// private static final TestStream ts = new TestStream();
private static TestStream ts1 = null;
// 3 这个类自动向整个系统提供这个实例
public synchronized static TestStream getTest() {
if (ts1 == null) {
ts1 = new TestStream();
}
return ts1;
}
public void getInfo() {
System.out.println("Output Message" + name);
}
}
```
在上面的代码中,我们定义了一个TestStream类,该类只能有一个实例,并且该类自己自己创建自己的唯一实例,并提供给所有其他对象。
在Main方法中,我们使用了TestStream类的getTest()方法来获取实例,并进行了一些操作:
```java
public class TestMain {
public static void main(String[] args) {
TestStream s = TestStream.getTest();
s.setName("赵志哲");
s.setName("代重庆");
s.setName("郭伟新");
System.out.println(s.getName());
System.out.println(s.getName());
System.out.println(s.getName());
TestStream s1 = TestStream.getTest();
s1.setName("赵志哲");
s1.setName("代重庆");
s1.setName("郭伟新");
System.out.println(s1.getName());
System.out.println(s1.getName());
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");
}
}
}
```
通过上面的代码,我们可以看到,单例模式为一个面向对象的应用程序提供了对象惟一的访问点,不管它实现何种功能,整个应用程序都会同享一个实例对象。
单例模式的优点是:
* 单例模式可以确保系统中只有一个实例,不会有多个实例竞争系统资源。
* 单例模式可以提供一个全局的访问点,让所有对象都可以访问这个实例。
单例模式的缺点是:
* 单例模式可能会导致系统中的耦合度增加,因为所有对象都需要访问这个实例。
* 单例模式可能会导致系统中的并发问题,因为多个线程可能会同时访问这个实例。
单例模式是一种常见的设计模式,可以为面向对象的应用程序提供对象惟一的访问点,但需要注意它的优点和缺点,以便更好地使用单例模式。