目次
さて、アプレットの方である。この構成をまずUML風に示そう。
GoApplet 1--- Mediator 1-- CommThread SelfStatus PartnerStatus 1--------------- BoardImage ↑ ↑ 1--------------- Controls | | 3------------------------------ Status
要するに Mediator パターンを使っているので、Mediator クラスがすべての集約的なコントローラーになっている。また、手番状態を表すのに、State パターンを使っており、Status とその派生クラスで「状態」を示している。
また、CommThread クラスは通信を担当するクラスであり、ソケットからの読み込みはスレッドとして実現され、Observer パターンにより、Mediator にコールバックする(CommNotifyインターフェイス)。この CommThread クラスはコールバック commNotify( CommItem ci ); で、通信内容を CommItem 派生クラスで伝える。プロトコル種別に応じて、CommItem 派生クラスには HandCommItem, WinCommItem, LoseCommItem, NogameCommItem クラスがあり、CommItem クラス自身のインスタンスも「内部エラー〉を表現するのに使われる。
また、CommItem 派生クラスと Status 派生クラスの間で一種の Visitor パターンを使っている。これは後のお楽しみ。