1 分钟阅读
简易的设计模式——单例模式
讲解单例模式的定义与实现方式,通过国王与人民的 Java 示例演示如何保证一个类只有一个实例并向整个系统提供该实例,并总结其优缺点与应用场景。
- #java
- #design-pattern
定义
单例模式是一种保证一个类中只有一个实例对象的软件设计模式。它需要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
这个还是比较好理解的,一个国家只能有一个国王,不可以出现第二个,所有的人都只能来膜拜这个伟大的国王。
下面直接上代码。
实现
国王类
public class King {
//确保只有一个国王
private static final King king=new King();
//保证不再产生新的国王了
private King(){}
//这个国家的人通过getInstance()方法拜见他们的国王
public static King getInstance(){
return king;
}
}
人民类
public class People {
//拜见国王
public void visitKing(){
System.out.println(King.getInstance());
}
}
测试类
public class SingletonTest {
public static void main(String args[]){
for(int i=0;i<10;i++){
//让10个屁民拜见国王
People people=new People();
System.out.println(people);
people.visitKing();
}
}
}
输出的结果
design.Singleton.People@165e6c89
design.Singleton.King@46c6c084
design.Singleton.People@22893e69
design.Singleton.King@46c6c084
design.Singleton.People@60607135
design.Singleton.King@46c6c084
design.Singleton.People@5ba88001
design.Singleton.King@46c6c084
design.Singleton.People@136bf0aa
design.Singleton.King@46c6c084
design.Singleton.People@138532dc
design.Singleton.King@46c6c084
design.Singleton.People@dce1387
design.Singleton.King@46c6c084
design.Singleton.People@54640b25
design.Singleton.King@46c6c084
design.Singleton.People@7417d56b
design.Singleton.King@46c6c084
design.Singleton.People@48bc9f58
design.Singleton.King@46c6c084
这里可以看出来屁民对象一直在变,但是国王一直都是那个国王对象。这就是单例模式了。
优点
- 单例模式只有一个实例,可以节约内存,对于一个对象需要频繁创建、消除时,单例模式无疑是最好的选择。
- 由于只有一个实例对象,可以避免对同一个资源的多重占用。
缺点
- 单例模式一般没有接口,不易扩展。
- 单例模式不易于测试。
- 有线程不安全的问题。
应用场景
- 要求生成唯一序号的环境
- 创建一个对象非常消耗资源时。
- 需要定义大量静态常量和静态方法时。
- 整个项目中需要一个共享访问点或共享数据时。