在Java中,觀察者和策略模式是兩種常見的設計模式。觀察者模式是一種行為型模式,它定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象,當主題對象狀態發生變化時,會通知所有的觀察者對象,使它們能夠自動更新自己。策略模式是一種行為型模式,它定義了一組算法,將每個算法都封裝起來,并且使它們之間可以互相替換,讓算法的變化獨立于使用它們的客戶端。
// 觀察者模式的示例 // 定義一個觀察者接口 public interface Observer { void update(String message); } // 定義一個主題接口 public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(String message); } // 實現一個主題類 public class ConcreteSubject implements Subject { private Listobservers = new ArrayList<>(); public void registerObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(String message) { for (Observer observer : observers) { observer.update(message); } } } // 實現一個觀察者類 public class ConcreteObserver implements Observer { private String name; public ConcreteObserver(String name) { this.name = name; } public void update(String message) { System.out.println(name + " received message: " + message); } }
在上面的代碼中,觀察者模式的主題類為ConcreteSubject,觀察者類為ConcreteObserver。當主題對象的狀態發生變化時,主題對象會調用notifyObservers()方法,通知所有的觀察者對象。觀察者對象在收到通知后,會根據通知內容進行更新。
// 策略模式的示例 // 定義一個策略接口 public interface Strategy { int doOperation(int num1, int num2); } // 實現兩種策略類 public class OperationAdd implements Strategy { public int doOperation(int num1, int num2) { return num1 + num2; } } public class OperationSubtract implements Strategy { public int doOperation(int num1, int num2) { return num1 - num2; } } // 實現一個策略模式的上下文 public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int num1, int num2) { return strategy.doOperation(num1, num2); } }
在上面的代碼中,策略模式的策略接口為Strategy,實現了兩個策略類OperationAdd和OperationSubtract。策略模式的上下文為Context,它通過傳遞不同的策略對象來執行不同的策略。