定义

确保某一个类只有一个实例,且自行实例化并向整个系统提供这个实例,这个类被称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。


懒汉式单例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);
    }
}
最后修改:2020 年 05 月 21 日
如果觉得我的文章对你有用,请随意赞赏