ich einige Code sah definiert das Urmuster auf diese Weise:was der Nutzen der Urmuster in diesem Fall ist
public abstract class Shape implements Cloneable {
private String id;
protected String type;
abstract void draw();
public String getType(){
return type;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
Zwei konkrete Klassen die oben Klasse erweitert:
public class Rectangle extends Shape {
public Rectangle(){
type = "Rectangle";
}
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square extends Shape {
public Square(){
type = "Square";
}
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Erstellen Sie eine Klasse um konkrete Klassen aus der Datenbank zu bekommen und sie in einer Hashtable zu speichern:
public class ShapeCache {
private static Hashtable<String, Shape> shapeMap = new Hashtable<String, Shape>();
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}
public static void loadCache() {
Square square = new Square();
square.setId("2");
shapeMap.put(square.getId(),square);
Rectangle rectangle = new Rectangle();
rectangle.setId("3");
shapeMap.put(rectangle.getId(), rectangle);
}
}
Meine Frage ist in der getShape m ethode was ist der Unterschied und Nutzen zwischen diesen beiden Implementierungen:
Implementierung 1:
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}
Und: Implementierung 2:
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
// return (Shape) cachedShape.clone();
return cachedShape ;
}
Ich habe versucht, die beiden Implementierungen und sie funktionieren gut nur ich möchte den Nutzen wissen, wenn ich die erste Implementierung
verwende
Ich mochte eigentlich, dass Sie erklärt;) – Jay
Ich bin nicht das OP: P – Jay