我的代码有什么错误吗?因为该变量在应用单例模式时不会更改其值。
我的代码:
class Singleton{
private final static Supplier<Singleton> INSTANCE = Singleton::new;
private int variable = 33;
public static synchronized Supplier<Singleton> getInstance() {
return INSTANCE;
}
void print(){
System.out.println(variable);
}
void change(int variable){
this.variable = variable;
}
}
public class Design {
public static void main(String[] args) {
Singleton.getInstance().get().print(); // print 33
Singleton.getInstance().get().change(99);
Singleton.getInstance().get().print(); // need to print 99 but it prints 33
}
}
请纠正我,如果我在实施Singleton Pattern时错了。
[尝试实施singetons很困难,通常(如果不是不良作业的一部分)是不良设计的标志。原因是S.T.U.P.I.D.中的“ S”。代码代表Singleton。只有极少数情况下需要使用Singleton,而这些情况通常应由框架代码处理。
get
方法的调用都会实例化一个新对象,并且Singleton设计模式没有很好地实现,因此,有很多教程实现了Singleton设计模式,但是如果您坚持使用Supplier接口,那么我会进行更改您的Singleton班级,似乎很不错:import java.util.function.Supplier;
class Singleton implements Supplier<Singleton> {
private static final Singleton INSTANCE = new Singleton();
private int variable = 33;
private Singleton() {
}
public static synchronized Singleton getInstance() {
return INSTANCE;
}
void print() {
System.out.println(variable);
}
void change(int variable) {
this.variable = variable;
}
@Override
public Singleton get() {
return this;
}
}