Sto lavorando su una libreria che può rappresentare virtualmente strisce di LED. La mia classe principale, LEDStrip
, è astratta e ha un paio di metodi astratti, come getLength()
e setColor(int index, Color c)
. Ciò consente a chiunque implementa la classe di concentrarsi su pochi semplici metodi e lasciare che la classe genitrice esegua tutto il processo (come applicare modelli o "unire" due strisce virtualmente).
La mia domanda è come sarebbe meglio creare questi oggetti "sintetici" LEDStrip. Ci sono alcuni modi in cui posso pensare, ma non sono sicuro di quale sia considerata la migliore pratica:
Metodo 1: Classe e costruttore separati
public class JoinedLEDStrip extends LEDStrip {
private LEDStrip strip1;
private LEDStrip strip2;
public JoinedLEDStrip(LEDStrip s1, LEDStrip s2) {
strip1 = s1;
strip2 = s2;
}
@Override
protected void setLED(int LEDNum, Color c) {
//Select which LEDStrip to set using length of first and second strips and apply offset
}
@Override
public int getNumLEDs() {
return strip1.getNumLEDs() + strip2.getNumLEDs();
}
}
Questo avrebbe semplicemente una classe separata che implementa i metodi astratti della classe LEDStrip. È piuttosto semplice, ma sembra che potrebbe essere un po 'prolisso da usare in pratica.
LEDStrip joined = new JoinedLEDStrip(firstStrip, secondStrip);
Metodo 2: Fabbrica "Istanza"
//LEDStrip.java
public final LEDStrip join(LEDStrip strip) {
return new LEDStrip() {
private LEDStrip strip1 = LEDStrip.this;
private LEDStrip strip2 = strip;
@Override
protected void setLED(int LEDNum, Color c) {
//Select which LEDStrip to set using length of first and second strips and apply offset
}
@Override
public int getNumLEDs() {
return strip1.getNumLEDs() + strip2.getNumLEDs();
}
};
}
Questo metodo sembra abbastanza semplice, anche se la classe LEDStrip potrebbe diventare un po 'affollata, specialmente se ci sono più di poche versioni sintetiche diverse. Inoltre, non sarà particolarmente chiaro a un utente della libreria come possono creare nuove trasformazioni.
LEDStrip joined = firstStrip.join(secondStrip);
Metodo 3: qualcos'altro?
Forse c'è un altro metodo a cui non ho pensato. Una fabbrica statica sembra non essere particolarmente utile, ma sono sicuro che Java ha altri metodi che potrebbero funzionare meglio.
Quale via è considerata la pratica più accettata?