OhJa kurssikokeen tehtävän 3 ratkaisu

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