Loading... ## 定义 确保某一个类只有一个实例,且自行实例化并向整个系统提供这个实例,这个类被称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。 ---------- ## 懒汉式单例UML ![懒汉单例](https://s1.ax1x.com/2020/05/21/YbAjzD.png) ---------- ## 懒汉式单例 ```java 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; } } ``` 懒汉式单例使用延迟加载技术,在需要的时候再加载实例,在多线程同时调用情况下容易出问题。 ---------- ## 饿汉式单例 ```java 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); } } ``` 最后修改:2020 年 05 月 21 日 02 : 28 PM © 允许规范转载