Ich bin neu in Design-Mustern. Ich versuche, Dekorationsmuster zu verwenden, um meiner bestehenden App neue Codes und Funktionen hinzuzufügen.Decorator Entwurfsmuster zum Hinzufügen neuer Methoden und Codes zum vorhandenen Objekt
Angenommen, ich habe eine Klasse von App, die zwei Methoden "Add" und "Multiply" hat. Zu einem bestimmten Zeitpunkt (Laufzeit) muss die App auch den Durchschnitt berechnen. Also versuche ich Decorator Design-Muster zu verwenden, um dies zu ermöglichen.
Bisher habe ich:
public class App implements Code{
public int a=2;
public int b=3;
@Override
public int Add(int a, int b) {
int add;
add = a+b;
return add;
}
@Override
public int Multiply(int a, int b) {
int mul;
mul= a*b;
return mul;
}
}
Um dies zu tun, ich eine Schnittstelle "Code" wie folgt definieren:
public interface Code {
public int Add (int a, int b);
public int Multiply (int a, int b);
}
und dann ein Dekorateur abstrakte Klasse CodeExtention
public abstract class CodeExtention implements Code{
protected Code extendedCode;
public CodeExtention(Code extendedCode) {
this.extendedCode = extendedCode;
}
@Override
public int Multiply(int a, int b){
return extendedCode.Multiply(a, b);
}
@Override
public int Add(int a, int b){
return extendedCode.Add(a, b);
}
}
Jetzt definiere ich eine Konzertklasse "AVG" erweitert von meiner abstrakten Klasse wie folgt:
public class AVG extends CodeExtention{
public AVG(Code extendedCode) {
super(extendedCode);
}
public int AVGcalculator (int a, int b){
return (a+b)/2;
}
@Override
public int Add(int a, int b) {
return super.Add(a, b);
}
@Override
public int Multiply(int a, int b) {
return super.Multiply(a, b);
}
}
Jetzt erwarte ich, dass mein app die durchschnittlichen berechnen kann dies zu tun in Ich habe mein Haupt:
public static void main(String[] args) {
Code app = new App();
app = new AVG(app);
}
}
Hier kann ich:
System.out.println(app.Add(3, 4));
System.out.println(app.Multiply(3, 4));
Ich kann immer noch nicht haben:
System.out.println(app.AVGcalculator(3, 4));
Ich weiß nicht, was falsch ist, oder auch wenn ich kann dieses Entwurfsmuster für mein Szenario verwenden!
Danke Ich würde gerne wissen, ob es der richtige Weg ist, neue Methoden zu meinen Objekten zur Laufzeit hinzuzufügen? – Farhood
Könnten Sie bitte erklären, was ist "((AVG) App)"? – Farhood
Es heißt Casting bedeutet im Grunde, einen Typ zu einem anderen zu drehen. Aber natürlich ist es nicht immer möglich, beispielsweise Integer nicht in Date zu übertragen. Ich schlage vor, Sie lesen über Casting hier ist ein schöner Link https://howtoprogramwithjava.com/java-cast/ – urag