定义
确保某一个类只有一个实例,且自行实例化并向整个系统提供这个实例,这个类被称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。
懒汉式单例UML
懒汉式单例
public class TaskManager {
// 静态的实例,一个类只能有一个。static
// 尽在类内部可见。 private
private static TaskManager tm = null;
// 将构造函数的可见性改为private 后, 在类的外部将不能使用new关键字来创建对象
// 但在类的内部不受影响
private TaskManager(){
// 初始化程序
}
public void displayProcesses(){}
public void displayServices(){}
public static TaskManager getInstance(){
if (tm == null){
tm = new TaskManager();
}
return tm;
}
}
懒汉式单例使用延迟加载技术,在需要的时候再加载实例,在多线程同时调用情况下容易出问题。
饿汉式单例
import java.util.*;
// 负载均衡器 单例类
public class LoadBalancer {
// 私有静态成员变量,存储唯一实例
private static LoadBalancer instance = new LoadBalancer();
// 服务器集合
// 这里的List 是接口类
private List serverList = null;
// 私有构造函数
private LoadBalancer(){
serverList = new ArrayList(); // ArrayList 是一个顺序表实现类
}
// 公有静态成员方法,返回唯一实例
public static LoadBalancer getLoadBalancer(){
return instance;
}
// 增加服务器
public void addServer(String server){
serverList.add(server);
}
// 删除服务器
public void removeServer(String server){
serverList.remove(server);
}
// 使用Random类在已有服务器列表中随机获得一个服务器名
public String getServer(){
Random random = new Random();
int i = random.nextInt(serverList.size());
return (String) serverList.get(i);
}
}