Questo è un esercizio di domanda accademica modello di progettazione. Abbiamo una classe di risorse e una pura classe di produzione ResourcesManager per gestire gli oggetti con tipo di risorsa.
La domanda è Date le seguenti due definizioni:
public class Resource {
}
public class ResourcesManager {
public static Resource loadFromDb(int resID) {
...
}
public static Resource createNew(String name) {
...
}
}
Applica modello Singleton e Factory
La mia soluzione sarebbe quella di applicare Singleton e Factory sia alla classe ResourcesManager. Dal momento che ho bisogno di una sola istanza di Manager, ed è quella responsabile della creazione di nuovi oggetti.
Alcuni altri studenti dall'altra parte vogliono applicare la classe Singleton alla classe di risorse .....
Ma se penso all'esecuzione seguente su un possibile cliente:
Resource r1 ResourcesManager = ResourcesManager.loadFromDb (1); Resource r2 ResourcesManager = ResourcesManager.loadFromDb (2);
Avrò il comportamento imprevisto che r1 = r2 .... Perché si riferiscono alla stessa istanza di risorsa Singleton ....
Questa è la soluzione che ho in mente:
public class Resource {
private String nome ;
private int id;
public Resource(){}
public void setName(String n){
name=n;
}
public void setID(int n){
id=n;
}
public String getName(){
return name;
}
public int getID(){
return id;
}
}
public class ResourcesManager {
private static final ResourcesManager theInstance = new ResourcesManager();
private ResourcesManager(){ }
public static ResourcesManager getInstance(){
return theInstance;
}
public static Resource loadFromDb(int resID) {
Class.classForName(“Driver”);
Connection con=DriverManager.get.Connection(...);
Statement sta = con.createStatement();
ResultSet rs = sta.executeQuery(“select name from resources where id=”+resID);
if (rs.next){
String name=rs.getString(“name”);
}
Resource s = new Resource();
s.setName(name);
s.setID(resID);
return s;
}
public static Resource createNew(String name) {
Resource s = new Resource();
s.setName(name);
return s;
}
}