package FassadenKlasse;
/*In Allgemein: Also zu verstehe ist, das Fassade-Muster hilft dabei
 	 * , die Komplexität eines Systems zu verbergen und es für den Benutzer einfacher zu machen
 	 * , mit dem System zu interagieren.
 	 */

	// Subsystem-Klasse für Speicherverwaltung
	class Speicher {
	    public void initialisiereSpeicher() {
	        System.out.println("Speicher wird initialisiert...");
	    }
	}

	// Subsystem-Klasse für Prozessorverwaltung
	class Prozessor {
	    public void initialisiereProzessor() {
	        System.out.println("Prozessor wird initialisiert...");
	    }
	}

	// Subsystem-Klasse für Eingabegeräteverwaltung
	class Eingabegeräte {
	    public void initialisiereEingabegeräte() {
	        System.out.println("Eingabegeräte werden initialisiert...");
	    }
	}

	// Subsystem-Klasse für Netzwerkverwaltung
	class Netzwerk {
	    public void initialisiereNetzwerk() {
	        System.out.println("Netzwerk wird initialisiert...");
	    }
	}

	// Fassade-Klasse, die eine einfache Schnittstelle bereitstellt
	class ComputersystemFassade {
	    private Speicher speicher;
	    private Prozessor prozessor;
	    private Eingabegeräte eingabegeräte;
	    private Netzwerk netzwerk;

	    public ComputersystemFassade() {
	        this.speicher = new Speicher();
	        this.prozessor = new Prozessor();
	        this.eingabegeräte = new Eingabegeräte();
	        this.netzwerk = new Netzwerk();
	    }

	    // Die Fassade-Methode, die das System startet
	    public void systemStarten() {
	        System.out.println("Systemstart wird vorbereitet...");
	        speicher.initialisiereSpeicher();
	        prozessor.initialisiereProzessor();
	        eingabegeräte.initialisiereEingabegeräte();
	        netzwerk.initialisiereNetzwerk();
	        System.out.println("System erfolgreich gestartet!");
	    }
	}

	// Client-Code, der die Fassade verwendet
	public class Fassadenklasse {
	    public static void main(String[] args) {
	        // Der Client verwendet die Fassade, um das System zu starten
	        ComputersystemFassade fassade = new ComputersystemFassade();
	        fassade.systemStarten();
	    }
	}

