之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法。
单例模式:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。一个类有且仅有一个实例,并且自行实例化向整个系统提供。
单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。http://baike.baidu.com/view/1859857.htm
例子代码如下:
public class TestSingleMode {
public static void main(String[] args) {
Singleton s1 = null ;//创建对象s1
Singleton s2 = null ;//创建对象s2
s1 = Singleton.getInstance() ;//把类中的实例化对象传递给s1
s1.print() ; //调用print方法打印输出
s2 = Singleton.getInstance() ;//把类中的实例化对象传递给s2
s2.print() ; //调用print方法打印输出
s2.setName("jack");
s2.setAge(2);
s1.print();
}
}
class Singleton {//定义Singleton类
//在类的内部用静态实例化对象并私有化
private static Singleton instance = new Singleton() ;
//用静态方式定义getter方法取回instance对象
public static Singleton getInstance(){
return instance ;
}
private String name ; //定义name属性
private int age ; //定义age属性
private Singleton(){} //无参构造 并私有化
public void setName(String name){ //setter方法
this.name = name ;
}
public String getName(){ //getter方法
return this.name ;
}
public void setAge(int age){//setter方法
this.age = age ;
}
public int getAge(){ //getter方法
return this.age ;
}
public void print(){ //定义一个打印输出的方法
System.out.println("姓名:" + getName() + "年龄:" + getAge()) ;
}
}
运行结果:
姓名:null年龄:0
姓名:null年龄:0
姓名:jack年龄:2
总结:s1 与 s2 指向同一对象,当修改s2的值时,s1的值也会改变。
笔记:Java中的单例设计模式