То, что я прочитал, является неизменностью, означает, что значение, назначенное после этого, остается постоянным, то есть когда оно назначено, оно отражается как одно и то же значение в коде.Реализует ли неизменность и Singleton ту же цель?
В большинстве случаев неизменность используется в парадигме функционального программирования в многопоточной среде.
Но.
ли синглтон шаблон также решает ту же цель,
Вы найдете ниже одноэлементных написано в 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
В же Кстати, я написал singleton в javaScript, а также,
следующим образом
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());
выход следующим
[email protected]:~/myPractise/JavaScript-DesignPatterns$ node singleton.js
Student is Sarvik
[email protected]:~/myPractise/JavaScript-DesignPatterns$
В обоих (т.е. javaScript и java) реализация шаблона Singleton вы можете видеть, что состояние объекта остается таким же, оно не изменяется.
Даже если мы сбросим значение объекта, , результат выдаст самое последнее значение сброса.
Так как с использованием шаблона Singleton я достиг неизменности в моем коде объекта «Студент»?
http: // stackoverflow.com/questions/13784244/are-all-immutable-objects-singleton-экземпляры – Unknown
Одиночный и неизменяемый ортогональны. Одноэлемент может быть изменчивым или неизменным; не одиночный может быть изменчивым или неизменным. Тем не менее, singleton * должен быть * потокобезопасным, если он используется в нескольких потоках; неизменяемые объекты по своей сути являются потокобезопасными. –
Ваш класс 'Student' явно не является неизменным: у вас есть метод setter. –