概述:
实际生活中单态模式的应用场景有挺多的,比如windows的任务管理器、回收站、网站的计数器、应用程序的日志应用。
那么存在什么需求时会使用单态模式?答案是在我们仅创建类的一个实例成为我们的最优选择时,例如1、网站的计数器,如果我们创建了多个实例,那么我们难以同步网站的计数情况;2、windows的回收站,多个实例很不方便维护....我们选择让像同类的实力指向同一个内存区。那么怎么去实现这个单态模式呢?下面来重点阐述:
单态模式的实现:
1、首先我们要明确我们最终要得到的是什么,假设这个类名为Main,我们最后调用的方式不再是通过Main m1 = new Main();而是通过Main m1 = Main.x1()://x1为一个静态的方法名;
2、然后我们为了实现单态需要保证什么?我们要保证无法从外部来new得到一个新的实例,我们的实例必须是单一的,
所以我们的构造函数必须要被私有化;
3、接下来我们就可以写代码了:
package com.zn.SingletonPattern;
public class Main {
int value;
private static Main instance;//创建一个私有的静态变量
private Main() {
System.out.println("正在执行构造器");
}//private保证了私有化,在类外部无法使用new方法来创建实例
//提供静态方法返回该类的实例,这个方法保证了实例只能存在一个
public static Main getInstance() {
if(null == instance) {
instance = new Main();//如果之前不存在已创建的instance,那么new 一个Main并返回
}
return instance;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public static void main(String[] args) {
Main t1 = Main.getInstance();
Main t2 = Main.getInstance();
t1.setValue(9);
System.out.println(t1 == t2);
}
}
输出是:正在执行构造器
true