Entwursmuster

Nippon

Neues Mitglied
Hallo,

Ich habe ein Problem und suche möglichst eine einfache Lösung.
Folgendes soll umgesetzt werden:
Definieren einer Mutterklasse z.B. (Arbeit).

Die Klasse Arbeit hat drei Methoden:

Code:
public class Arbeit
{
 
    protected void Hole_Werkzeug(){
     }
 
 
    public void Arbeiten(){
     }
 
 
    protected void Bring_Werkzeug_Zurück(){
     }
}

Die Klasse Arbeiter1 erbt von der Mutterklasse und kann nur die Methode Arbeiten anpassen. Was er arbeitet weiß ich nicht, aber er soll immer vorher das Werkzeug holen und nach der Arbeit das Werkzeug zurück bringen.

Code:
public class extends Arbeiter1
{
 
   public void Arbeiten(){
    }
 
}
Wie kann ich die Ablauflogik einhalten die immer durchgeführt werden soll und nicht geändert werden darf?

Grüß
 

Flown

Administrator
Mitarbeiter
Ich kann dir nicht die einfachste, sondern die sauberste Lösung bieten:
Du führst noch eine weitere Methode ein z.B. void verrichteArbeit(). Danach setzt du deine Arbeit-Klasse auf abstract und führst in der Methode arbeiten deine Logik ein und machst die Methode noch final. Danach sieht das in etwa so aus:
Java:
public class Test {
	public static void main(String... args) {
		Arbeit a = new Arbeit1();
		a.arbeiten();
	}
	
}

abstract class Arbeit {
	
	public final void arbeiten() {
		holeWerkzeug();
		verrichteArbeit();
		bringWerkzeugZurueck();
	}
	
	protected abstract void holeWerkzeug();
	
	protected abstract void bringWerkzeugZurueck();
	
	protected abstract void verrichteArbeit();
}

class Arbeit1 extends Arbeit {
	
	@Override
	protected void holeWerkzeug() {
		System.out.println("Hole das Werkzeug!");
	}
	
	@Override
	protected void verrichteArbeit() {
		System.out.println("Verrichte arbeit!");
	}
	
	@Override
	protected void bringWerkzeugZurueck() {
		System.out.println("Lege das Werkzeug zurück!");
	}
}
 

InfectedBytes

Top Contributor
Java:
public abstract class Arbeit {
    private final void Hole_Werkzeug(){
     }


    public final void Arbeiten(){
        Hole_Werkzeug();
        führeArbeitAus();
        Bring_Werhzeug_Zurück();
     }
    protected abstract führeArbeitAus();

    private final void Bring_Werkzeug_Zurück(){
     }
}
Deiner Unterklassen dürfen bzw. müssen nun die führeArbeitAus Methode überschreiben, alle anderen Methoden können nicht geändert werden.
Deine Namensgebung ist nicht ganz ideal. In Java verwendet man typischerweise camelCase. Also anstatt Bring_Werkzeug_Zurück, lieber bringWerkzeugZurück
 

Neue Themen


Oben