@634

GRASPパターン - Indirectionパターン(間接化パターン)

Advertisement

Indirectionパターンの提唱するもの

あるクラス同士を直接結びつけるのではなく、橋渡しを行うクラスを間に挟むことによって、クラス同士の結合度を緩やかにするパターン。

考察

様々なクラスから、あるクラスへメッセージパッシングを行うような設計をする際に、直接メッセージを送らずに、クラスを定義して間に挟む。そのクラスを通して実際にメッセージを送信したいクラスへメッセージを送る。

メッセージ送信先クラスの仕様が変更になっても、そのクラスに直接メッセージを送っているクラスはひとつだけなので、容易に変更を行うことが出来る。

メリット

  • 変更箇所が集約されるため、変更に強い設計となる。

ものすごく単純な例

単純なクラスを定義する
public class Sample{
    public static void main(Strimg[] args){
        String msg = new String("メッセージ");
        System.out.println(msg)
    }
}

public class Test{
    public static void main(Strimg[] args){
        String msg = new String("メッセージ");
        System.out.println(msg)
    }
}

関連図
図1:クラス同士の関連図

他にも似たようなクラスが散在しているとして、ここで各クラスのメッセージ出力を、現行の標準出力ではなくファイル出力へと変更する必要が出てきたとする。その際、上記の例のような設計になっていると、複数箇所を変更しなくてはならなくなる。

間接化パターンに基づいた設計を行うと、以下のようになる。
public class Sample{
    public static void main(Strimg[] args){
        MessageOut msgout = new MessageOut();
        String msg = new String("メッセージ");
        msgout.out(msg)
    }
}

public class Test{
    public static void main(Strimg[] args){
        MessageOut msgout = new MessageOut();
        String msg = new String("メッセージ");
        msgout.out(msg)
    }
}

public class MessageOut{
    public void out(String msg){
        System.out.println(msg);
    }
}

間接化パターンを利用した関連図
図2:クラス同士の関連図

このように設計しておけば、上記のように標準出力からファイル出力に変更するような場合でも間接オブジェクトと出力を行うオブジェクトだけ修正すればよい。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール