简易的设计模式——单例模式
定义
单例模式是一种保证一个类中只有一个实例对象的软件设计模式。它需要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
这个还是比较好理解的,一个国家只能有一个国王,不可以出现第二个,所有的人都只能来膜拜这个伟大的国王。
下面直接上代码。
实现
国王类
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
这里可以看出来屁民对象一直在变,但是国王一直都是那个国王对象。这就是单例模式了。
优点
· 单例模式只有一个实例,可以节约内存,对于一个对象需要频繁创建、消除时,单例模式无疑是最好的选择。
· 由于只有一个实例对象,可以避免对同一个资源的多重占用。
缺点
· 单例模式一般没有接口,不易扩展。
· 单例模式不易于测试。
· 有线程不安全的问题。
应用场景
· 要求生成唯一序号的环境
· 创建一个对象非常消耗资源时。
· 需要定义大量静态常量和静态方法时。
· 整个项目中需要一个共享访问点或共享数据时。