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); } } }