我可以在 java 中的单例 class 中添加一个额外的 public 方法吗
can i add an extra public method in singleton class in java
我有一个单例 class 并且我添加了 msg 方法但是我不确定是否可以将它添加到单例 class 或不
public class Singleton {
private static Singleton single_instance = null;
private Singleton() {
}
public void msg(String msg){
System.out.println(msg);
}
public static Singleton getInstance() {
if (single_instance == null) {
single_instance = new Singleton();
}
return single_instance;
}
}
Singleton 是一种 Creational Design Pattern,它确保其只有一个对象kind 存在并为任何其他代码提供对其的单一访问点。除此之外,它只是一个普通的 class,可以有尽可能多的 public 方法来满足它的设计要求。
Singleton 对象可以改变(改变其内部属性的值——变量),也可以是不可变的(例如,Java enums
可用于创建 Singleton 实例)。
以您的 class 为例,您可以这样做并且完全合法:
public class Singleton {
private static Singleton single_instance = null;
private String message = "none";
private Singleton() {
}
public void showCurrentMessage(){
System.out.println(msg);
}
public void updateMessage(String msg) {
this.msg = msg;
}
public static Singleton getInstance() {
if (single_instance == null) {
single_instance = new Singleton();
}
return single_instance;
}
}
请注意,我们严格 谈到这种方法的合法性。另一个要讨论的问题是关于方法的实用性,您需要考虑很多事情,例如:
- 代码的可测试性——Singleton 不受欢迎的原因之一
- 多线程应用程序中的可用性 - 当对象在多线程上下文中发生变化时,需要许多保护措施。
可能还有很多其他的;尽管其中一些(如果不是全部)也适用于 non-Singleton 个对象。
我有一个单例 class 并且我添加了 msg 方法但是我不确定是否可以将它添加到单例 class 或不
public class Singleton {
private static Singleton single_instance = null;
private Singleton() {
}
public void msg(String msg){
System.out.println(msg);
}
public static Singleton getInstance() {
if (single_instance == null) {
single_instance = new Singleton();
}
return single_instance;
}
}
Singleton 是一种 Creational Design Pattern,它确保其只有一个对象kind 存在并为任何其他代码提供对其的单一访问点。除此之外,它只是一个普通的 class,可以有尽可能多的 public 方法来满足它的设计要求。
Singleton 对象可以改变(改变其内部属性的值——变量),也可以是不可变的(例如,Java enums
可用于创建 Singleton 实例)。
以您的 class 为例,您可以这样做并且完全合法:
public class Singleton {
private static Singleton single_instance = null;
private String message = "none";
private Singleton() {
}
public void showCurrentMessage(){
System.out.println(msg);
}
public void updateMessage(String msg) {
this.msg = msg;
}
public static Singleton getInstance() {
if (single_instance == null) {
single_instance = new Singleton();
}
return single_instance;
}
}
请注意,我们严格 谈到这种方法的合法性。另一个要讨论的问题是关于方法的实用性,您需要考虑很多事情,例如:
- 代码的可测试性——Singleton 不受欢迎的原因之一
- 多线程应用程序中的可用性 - 当对象在多线程上下文中发生变化时,需要许多保护措施。
可能还有很多其他的;尽管其中一些(如果不是全部)也适用于 non-Singleton 个对象。