PutkistonOsa.java
public interface PutkistonOsa {
void lisaaVirtausta(double virtaus);
}
Paaohjelma.java
import java.util.ArrayList;
import java.util.List;
public class Paaohjelma {
public static void main(String[] args) {
Viemari viemari = new Viemari();
Mittari mittari2 = new Mittari(viemari);
Mittari mittari3 = new Mittari(viemari);
Mittari mittari4 = new Mittari(viemari);
Mittari mittari5 = new Mittari(viemari);
List<PutkistonOsa> haarat2 = new ArrayList<PutkistonOsa>();
haarat2.add(mittari3);
haarat2.add(mittari4);
haarat2.add(mittari5);
Haarauma haarauma2 = new Haarauma(haarat2);
List<PutkistonOsa> haarat1 = new ArrayList<PutkistonOsa>();
haarat1.add(mittari2);
haarat1.add(haarauma2);
Haarauma haarauma1 = new Haarauma(haarat1);
Mittari mittari1 = new Mittari(haarauma1);
Putki lahde1 = new Putki(mittari1);
Putki lahde2 = new Putki(haarauma2);
lahde1.lisaaVirtausta(123.45);
lahde2.lisaaVirtausta(3000.0);
System.out.println("Mittari 1: " + mittari1.haeVirtaus());
System.out.println("Mittari 2: " + mittari2.haeVirtaus());
System.out.println("Mittari 3: " + mittari3.haeVirtaus());
System.out.println("Mittari 4: " + mittari4.haeVirtaus());
System.out.println("Mittari 5: " + mittari5.haeVirtaus());
}
}
Viemari.java
public class Viemari implements PutkistonOsa {
@Override
public void lisaaVirtausta(double virtaus) {
//tyhjää täynnä
}
}
Putki.java
public class Putki implements PutkistonOsa {
private PutkistonOsa seuraava;
public Putki(PutkistonOsa seuraava) {
this.seuraava = seuraava;
}
@Override
public void lisaaVirtausta(double virtaus) {
seuraava.lisaaVirtausta(virtaus);
}
}
Mittari.java
public class Mittari extends Putki {
private double virtaus;
public Mittari(PutkistonOsa seuraavaOsa) {
super(seuraavaOsa);
}
public double haeVirtaus() {
return virtaus;
}
@Override
public void lisaaVirtausta(double virtaus) {
super.lisaaVirtausta(virtaus);
this.virtaus += virtaus;
}
}
Haarauma.java
import java.util.List;
public class Haarauma implements PutkistonOsa {
private List<PutkistonOsa> putkistonOsat;
public Haarauma(List<PutkistonOsa> osat) {
this.putkistonOsat = osat;
}
@Override
public void lisaaVirtausta(double virtaus) {
double tasattuVirtaus = virtaus / putkistonOsat.size();
for (PutkistonOsa pala : putkistonOsat) {
pala.lisaaVirtausta(tasattuVirtaus);
}
}
}