Java プログラミング スキルの向上: アダプター モードとオブザーバー モードの実装をマスターするには、特定のコード例が必要です
はじめに:
日々のソフトウェア開発では、次のことが必要になることがよくあります。異なるクラス間の互換性の問題に対処し、さまざまなユーザー インターフェイスのイベント監視と処理も実装する必要があります。アダプター パターンとオブザーバー パターンは、これらの問題を効果的に解決できる 2 つの一般的に使用される設計パターンです。この記事では、アダプター パターンとオブザーバー パターンの実装を詳しく紹介し、読者の理解を深めるために具体的な Java コード例を示します。
アダプター パターンは、既存のクラスが互換性のないクラスと連携できるようにする構造設計パターンです。アダプター パターンは、中間アダプター クラスを作成することによって、クライアントがインターフェイスを使用できるようにインターフェイスを変換します。以下は、単純なアダプター パターンの例です。
// 目标接口 interface MediaPlayer { void play(String audioType, String fileName); } // 被适配的类 class Mp3Player { public void playMp3(String fileName) { System.out.println("Playing mp3 file: " + fileName); } } // 适配器类 class MediaAdapter implements MediaPlayer { private Mp3Player mp3Player; public MediaAdapter() { mp3Player = new Mp3Player(); } @Override public void play(String audioType, String fileName) { if (audioType.equalsIgnoreCase("mp3")) { mp3Player.playMp3(fileName); } } } // 客户端代码 public class AudioPlayer implements MediaPlayer { private MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { if (audioType.equalsIgnoreCase("mp3")) { System.out.println("Playing mp3 file: " + fileName); } else if (audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) { mediaAdapter = new MediaAdapter(); mediaAdapter.play(audioType, fileName); } else { System.out.println("Invalid media type: " + audioType); } } public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "music.mp3"); audioPlayer.play("vlc", "video.vlc"); audioPlayer.play("mp4", "video.mp4"); } }
上記の例には、ターゲット インターフェイス MediaPlayer と、適応されたクラス Mp3Player があります。 Mp3Player と MediaPlayer インターフェイスとの互換性を持たせるために、MediaPlayer インターフェイスを実装し、通話要求を Mp3Player クラスに転送するアダプター クラス MediaAdapter を作成しました。このようにして、クライアント コードは MediaPlayer インターフェイスを通じてさまざまな種類のメディア ファイルを操作できます。
オブザーバー パターンは動作設計パターンであり、1 対多の依存関係を定義し、複数のオブザーバー オブジェクトが特定のオブジェクトを同時に監視できるようにします。 time. トピック オブジェクトが変更されたときに、すべてのオブザーバー オブジェクトに更新を通知するトピック オブジェクト。以下は、単純なオブザーバー パターンの例です。
import java.util.ArrayList; import java.util.List; // 主题接口 interface Subject { void registerObserver(Observer observer); void unregisterObserver(Observer observer); void notifyObservers(); } // 观察者接口 interface Observer { void update(String message); } // 具体主题类 class WeatherStation implements Subject { private List<Observer> observers; private String weather; public WeatherStation() { observers = new ArrayList<>(); } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void unregisterObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(weather); } } public void setWeather(String weather) { this.weather = weather; notifyObservers(); } } // 具体观察者类 class WeatherDisplay implements Observer { private String latestWeather; @Override public void update(String message) { latestWeather = message; display(); } private void display() { System.out.println("Latest weather: " + latestWeather); } } // 客户端代码 public class ObserverPatternExample { public static void main(String[] args) { WeatherStation weatherStation = new WeatherStation(); WeatherDisplay weatherDisplay1 = new WeatherDisplay(); WeatherDisplay weatherDisplay2 = new WeatherDisplay(); weatherStation.registerObserver(weatherDisplay1); weatherStation.registerObserver(weatherDisplay2); weatherStation.setWeather("Sunny"); weatherStation.setWeather("Cloudy"); weatherStation.unregisterObserver(weatherDisplay2); weatherStation.setWeather("Rainy"); } }
上記の例には、トピック インターフェイス Subject と、特定のトピック クラス WeatherStation があります。また、オブザーバー インターフェイス Observer と、特定のオブザーバー クラス WeatherDisplay もあります。 WeatherStation の天気が変化すると、登録されているすべてのオブザーバー オブジェクトは、notifyObservers メソッドを通じて通知され、オブザーバー オブジェクトは update メソッドを呼び出してステータスを更新します。このようにして、複数のオブザーバーを簡単に実装して、同じトピックを監視し、応答することができます。
以上がJava プログラミング スキルの向上: アダプター パターンとオブザーバー パターンの実装をマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。