// Subsystem classes
class Subsystem1 {
public void operation1() {}
public void operation2() {}
}
class Subsystem2 {
public void operation1() {}
public void operation2() {}
}
// Facade class
class Facade {
private Subsystem1 subsystem1;
private Subsystem2 subsystem2;
private Subsystem3 subsystem3;
public Facade() {
this.subsystem1 = new SubSystem1();
this.subsystem2 = new SubSystem2();
this.subsystem3 = new SubSystem3();
}
// Methods that simplify complex operations
public void operationA() {
System.out.println('Facde Operation A");
subsystem1.operation1();
subsystem2.operation1();
subsystem3.operation1();
}
}
// Exmplae
public class FacadePatternExample {
public static void main(String[] args) {
Facade facade = new Facade();
// Use the Facade to simplify operations
facade.operationA();
facade.operationB();
}
}
// Observer interface
interface Observer {
void update(String message);
}
// ConcreteObserver class
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
// Subject class
class Subject {
private List<Observer> observers = new ArrayList<>();
// Add an observer to the list
public void addObserver(Observer observer) {
observers.add(observer);
}
// Remove an observer from the list
public void removeObserver(Observer observer) {
observers.remove(observer);
}
// Notify all observers with a message
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
// Example usage
public class ObserverPatternExample {
public static void main(String[] args){
// Create subject
Subject subject = new Subject();
// Create observers
Observer observer1 = new ConcreteObserver("Observer 1");
Observer observer2 = new ConcreteObserver("Observer 2");
// Register observers with the subject
subject.notifyObservers("Hello Observers!");
// Unregister observer1
subject.removeObserver(observer1);
// Notify remaining observer with another message
subject.notifiyObservers("Observer 1 has been removed.");
}
}