java - 带有 JAVA 服务加载器的单例设计模式
问题描述
我一直在寻找 关于网络服务加载器的问题的答案,并遇到了一个使用单例设计模式的解决方案。
我根据该模式实现了我的程序,它给了我预期的输出。
但是对于单例设计模式,我还有一些需要澄清的地方。
为什么我们private
static
在设计模式时使用变量和静态方法?
这是我根据模式设计的类。
public class SingletonDesignPattern {
private static SingletonDesignPattern singletonDesignPattern;
private ServiceLoader<Cipher> serviceLoader;
private SingletonDesignPattern() {
serviceLoader = ServiceLoader.load(Cipher.class);
}
public static SingletonDesignPattern getInstance() {
if (singletonDesignPattern == null)
singletonDesignPattern = new SingletonDesignPattern();
return singletonDesignPattern;
}
}
我发现我们使用static
方法是因为我们不会在任何其他类中创建此类的实例。
除了我上面提到的之外,任何说明使用static private
变量和static
方法的目的的解释都值得赞赏。
解决方案
单例模式的目的是只创建该类的一个实例并在任何地方使用它。它是私有的,因为我们不希望它被多次创建。它是静态的,因为我们想在任何地方使用相同的创建实例。
推荐阅读
- python - 使用字典映射选择性地更新数据框列
- sql - 需要为 ID 、 ID2、 ID3、 ID4 以 'BB%'、'ZZ%' 开头的所有列显示某些值
- python - 将元组列表和常规列表组合到字典中,然后按元组的唯一值求和
- elixir - 仅当存在参数时,如何在 ecto 中定义连接?
- sql - 如何内部连接字段的子集,为两种情况分配值并转储其余情况
- ruby-on-rails - 基于输入的带有 url 的 Rails 表单
- sql-server - 具有多个场景的嵌套 case 语句
- assembly - N 是作为内存地址存储在寄存器中还是作为整数存储?
- elasticsearch - 具有 Grok 模式 DATESTAMP_RFC2822 的 ElasticSearch 摄取管道
- mysql - 删除连接到 2 个表的条目