技術共有

赤壁の戦いの狼煙塔 - オブザーバーモード

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

「戦争が3か月続くと、本国からの手紙は1万ゴールドの価値がある。設計パターンが正しければ、数千の軍隊が一つになって行動するだろう。」

壮大な三国志の歴史の中で、赤壁の戦いは間違いなく天下を変える重要な戦いでした。この戦いでは、一見シンプルだが重要なシステム、ビーコンタワーが大きな役割を果たしました。この古代の通信システムは、現代のソフトウェア設計におけるオブザーバー パターンを思い出させますか?今日は、数千年を旅して、狼煙塔の煙から観察者モードの謎を明らかにしましょう。

戦雲が赤壁川のほとりに立ち上り、
ひとたび戦争が勃発すれば、全世界が知ることになるだろう。
必要に応じて変化を観察し、
一手で敵を倒し国を守る。

戦争は激化する

西暦 208 年、曹操は軍を率いて南下し、江東を平らにし、一気に世界を統一することを目指しました。脅威的な曹操軍に直面して、孫劉連合は強者を弱者で倒すための慎重な計画を立てる必要がありました。

「曹軍の動きにタイムリーに対応したいなら、効率的な早期警戒システムを構築する必要がある」と周瑜は眉をひそめて考えた。

諸葛亮は羽扇を軽く振り、「私の意見では、狼煙台は川沿いに設置できると思います。敵が発見されれば狼煙が灯されます。煙が立ち上る場所には敵軍がいるはずです。」と自信満々に言いました。

周瑜は目を輝かせて「素晴らしい!これで我が軍はいつでも敵の動きを把握でき、あらゆる危険に備えることができる」と語った。

このように、長江沿いには狼煙台が歩哨のように立っています。各狼煙台には昼夜を問わず専任の担当者が配置されており、曹軍の移動が発見されるとすぐに狼煙が点火されます。

ある日、最前線の狼煙台の衛兵が突然曹軍の前線部隊の痕跡を発見した。

「早く!ビーコンに点火して!」と警備員が叫んだ。

瞬間、濃い煙が空に立ち上った。その直後、第二、第三の狼煙塔が次々と点火され、ドミノ倒しのように素早く狼煙が渡された。

周瑜は川沿いの軍テントで諸葛亮と軍事について話し合っていた。突然、一人の兵士が急いでやって来ました。

「報告! 前線に狼煙が上がり、曹操軍が到着しました!」

周瑜と諸葛亮は顔を見合わせて微笑み、自信を持ってこう言いました。「命令を下し、計画に従って行動してください!」

観察者パターン分析

オブザーバー パターンは 1 対多の依存関係を定義し、複数のオブザーバー オブジェクトが特定の対象オブジェクトを同時に監視できるようにします。このトピック オブジェクトは、状態が変化したときにすべてのオブザーバー オブジェクトに通知し、オブザーバー オブジェクト自体を自動的に更新できるようにします。

赤壁の戦いのビーコン システムでは、オブザーバー モードの影がはっきりとわかります。

  • ビーコンタワーは観測対象(Subject)です
  • 各軍事部隊(周瑜や諸葛孔明の本拠地など)は監視員です。
  • ビーコンの点火は状態の変化です
  • 発煙信号の送信は通知メカニズムです

クラス図を使用して Observer パターンの構造を理解しましょう。

画像-20240707223121510

コード

Java を使用してこのビーコン システムを実装してみましょう。

import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface MilitaryUnit {
    void update(String message);
}

// 主题(烽火台)
class BeaconTower {
    private List<MilitaryUnit> observers = new ArrayList<>();
    private String message;

    public void attach(MilitaryUnit observer) {
        observers.add(observer);
    }

    public void detach(MilitaryUnit observer) {
        observers.remove(observer);
    }

    public void notify(String message) {
        this.message = message;
        for (MilitaryUnit observer : observers) {
            observer.update(message);
        }
    }

    public void signalEnemyMovement(String message) {
        System.out.println("烽火台: " + message);
        notify(message);
    }
}

// 具体观察者
class CommandCenter implements MilitaryUnit {
    private String name;

    public CommandCenter(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " 收到消息: " + message);
    }
}

// 主类
public class ObserverPatternDemo {
    public static void main(String[] args) {
        BeaconTower beaconTower = new BeaconTower();

        CommandCenter zhouYu = new CommandCenter("周瑜");
        CommandCenter zhuGeLiang = new CommandCenter("诸葛亮");

        beaconTower.attach(zhouYu);
        beaconTower.attach(zhuGeLiang);

        beaconTower.signalEnemyMovement("曹军前锋已到达赤壁!");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

演算結果

烽火台: 曹军前锋已到达赤壁!
周瑜 收到消息: 曹军前锋已到达赤壁!
诸葛亮 收到消息: 曹军前锋已到达赤壁!
  • 1
  • 2
  • 3

オブザーバーパターンの魔法

赤壁の戦いのビーコン システムを通じて、オブザーバー モードのいくつかの重要な利点がわかります。

  1. デカップリング : ビーコン タワー (テーマ) は、どの軍事ユニット (オブザーバー) がそれを監視しているかを知る必要はなく、軍事ユニットはビーコン タワーの内部実装を知る必要もありません。この疎結合設計により、システムの柔軟性が向上します。
  2. スケーラビリティ: 新しい対応ユニット (物流部門など) を追加する必要がある場合は、既存のコードを変更せずに、新しいオブザーバーを作成してビーコン タワーに登録するだけで済みます。
  3. ブロードキャスト通信: ビーコン発射のように、メッセージを複数の受信者に素早く伝えることができ、防衛線全体が敵の状況を素早く把握できます。
  4. レスポンシブデザイン: オブザーバー パターンは、状態が変化したときに、すべての関連部分を適時に更新できるため、応答性の高いシステム設計を実装するのに非常に適しています。

結論

諸葛亮のビーコンシステムは、赤壁の戦いの勝利に貢献しただけでなく、観察者モードの本質を私たちに明らかにしました。最新のソフトウェア開発では、オブザーバー パターンは、グラフィカル ユーザー インターフェイス、イベント処理システム、メッセージ プッシュ サービスなどの多くの分野で広く使用されています。

「何千マイルも離れていても、戦略を立てることで勝利できる」という言葉があるように、オブザーバー モードをマスターすれば、絶え間なく変化するデジタル戦場で無敵であり続ける、応答性が高く、適切に構造化されたソフトウェア システムを構築できます。

次の章では、デザイン パターンの旅を続け、三国志の知恵と現代のソフトウェア デザインの絶妙な組み合わせをさらに探求します。乞うご期待!

参考原文:詳細はこちら
AI学習アシスタント:https://aistar.cool