gpt4 book ai didi

javascript - Immutability 和 Singleton 解决的是同一个目的吗?

转载 作者:行者123 更新时间:2023-11-29 17:56:35 25 4
gpt4 key购买 nike

我读到的是不可变性意味着一旦分配的值保持不变,即一旦分配,它在代码中反射(reflect)为相同的值。

不可变性主要用于多线程环境中的函数式编程范例。

但是。

单例模式是否也解决了同样的问题,

请在下面找到用 java 编写的单例,

 package com.main;

class Student{
private Student(){

}
public static Student INSTANCE;
static{
INSTANCE = new Student();
}

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString(){
return "Student is "+this.name;
}
}


public class SingletonTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student = Student.INSTANCE;
student.setName("Arnold");

student = Student.INSTANCE;
student.setName("Kevin");

student = Student.INSTANCE;
student.setName("Jim");

student = Student.INSTANCE;
student.setName("Falcon");

student = Student.INSTANCE;
student.setName("Sarvik");


student = Student.INSTANCE;
System.out.println(student);

}

}

上面代码的输出是

Student is Sarvik

同样的,我也用javaScript写过singleton,

如下

var Student = (function(){
var name = "";
var obj = {
setName : function(studentName){
name = studentName;
},
getName : function(){
return name;
}
}

return {
INSTANCE : obj
}
})();


var student = Student.INSTANCE;
student.setName("Arnold")

student = Student.INSTANCE;
student.setName("Kevin");

student = Student.INSTANCE;
student.setName("Jim");

student = Student.INSTANCE;
student.setName("Falcon");

student = Student.INSTANCE;
student.setName("Sarvik");

student = Student.INSTANCE;

console.log("Student is "+student.getName());

输出结果如下

rahul@rahul:~/myPractise/JavaScript-DesignPatterns$ node singleton.js 
Student is Sarvik
rahul@rahul:~/myPractise/JavaScript-DesignPatterns$

在单例模式的两种(即 javaScript 和 java)实现中你可以看到对象的状态保持不变,没有改变。

即使我们重新设置对象的值,输出给出最新的重置值。

那么使用 Singleton 模式是否可以在我的对象“Student”代码中实现不变性?

最佳答案

不是真的。

不可变类也不意味着您不能创建同一个不可变类的更多对象。对于单例,通常每个 JVM 需要一个实例才能称为单例。

不可变意味着值一旦分配就不能改变,所以通常你不会在不可变中有setter方法,但单例没有这样的要求。但是从内存的 Angular 来看,单例更多,只有一个实例会存活。您无法更改实例,但可以使用单例来保存您想要的任何值,并且您也可以在任何时间点更改它。

例如我们使用单例类作为服务定位器。我们可以根据需要在任何给定时间点更改服务。对于同一件事,我可以创建 2 个具有相同变量但包含不同值的不可变类对象。

希望这对您有所帮助。

关于javascript - Immutability 和 Singleton 解决的是同一个目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com