2017-05-28 4 views
1

Ist es in Ordnung (für Java und SOLID Principals), abstrakte Klassen zu erweitern, um Eigenschaften aus der Superklasse zu setzen? Was ich erreichen möchte ist, auf p2 unterschiedliche Werte anzuwenden, abhängig davon, was p1 hat und auch p3-Werte hängen davon ab, was der Wert von p2 ist (etwas Ähnliches, wenn man Dropdown-Menüs kaskadiert). Kann dieses Szenario mit einem Entwurfsmuster behandelt werden?Supereigenschaften mit abstrakten Unterklassen setzen

public interface Iface{ 
    public void set_p1(int i); 
    public void set_p2(int i); 
    public void set_p3(int i); 
} 

public abstract class A implements Iface{ 
    private int p1; 
    private int p2; 
    private int p3; 

    public void set_p1(int i){ 
     this.p1 = i; 
    } 

    public void set_p2(int i){ 
     this.p2 = i; 
    } 

    public void set_p3(int i){ 
     this.p3 = i; 
    } 
} 

Hier stelle ich p1 bis 100

public abstract class setOne extends A { 
    public setOne(){ 
     set_p1(100); 
    } 
} 

jetzt stelle ich p2 abhängig von den Werten von p1

public abstract class setTwo extends setOne { 
    public setTwo(){ 
     //do some work using p1 
     set_p2(200); 
    } 
} 

jetzt ich meine setTwo abstrakte Klasse

public class TestClass extends setTwo { 
    public TestClass(){ 
     super(); 
    } 
} 

TestClass myObj = new TestClass(); 
instanziiert

jetzt erwarte ich die Werte von th e-Objekt wie folgt:

myObj.p1 = 100 

und

myObj.p2 = 200; 
+0

Alles funktioniert wie oben myObj.p1 beschreiben, ist in der Tat 100 und gleich für myObj.p1 ist 100. ich java bin hier, damit ich sehen will, ob was ich erfüllt mit den festen Prinzipien und mit, wie die Vererbung getan haben wird in Java verwendet. danke. –

Antwort

1

Das ist etwas komplexe Implantation. Ich fühle, dass Sie über einzelne verantwortliche Prinzip denken.

Das Design basierend auf dem, was Sie tun müssen, hängt von p1 und p2 ab. können Sie einfach POJO verwenden, um dies zu übertreffen.

public abstract class A { 
    private int p1; 
    private int p2; 
    private int p3; 

    public void setP1(int i){ 
     this.p1 = i; 
    } 

    public void setP2(int i){ 
     //do some work using p1 
     this.p2 = i; 
    } 

    public void setP3(int i){ 
     this.p3 = i; 
    } 
} 

Wenn Sie einige Voraus Logikbasis auf Wert durchführen müssen, können Sie Implementierung zu SetP2-Methode bereitstellen.

public interface NumberFunction { 
    int doCalculate(int number); 
} 

Und Funktion wie folgt ändern.

public void setP2(int i, NumberFunction function){ 
    int functionResult = function.doCalculate(p1); 
    this.p2 = i; 
} 

So Nummer Funktion zu halten, um Ihre Zahlen zu ändern. und Eine Klasse, die dafür verantwortlich ist, Werte zu halten.

Hoffe, das wird Ihnen helfen.

Verwandte Themen