C#
 Computer >> コンピューター >  >> プログラミング >> C#

【C#】Facadeパターンとは?仕組みと実装方法をわかりやすく解説

Facadeパターンとは

Facade(ファサード)パターンは、GoFデザインパターンのひとつで、複雑なサブシステムの上にシンプルな「窓口」を設ける構造を指します。名前の由来は建築用語の「ファサード(建物の正面外観)」で、複雑な内部構造を隠蔽し、利用者には簡潔なインターフェースだけを見せることを目的としています。

つまりFacadeパターンとは、「より複雑な構造の上に、よりシンプルな構造を重ねる」ためのデザインパターンなのです。

登場する要素(Participants)

Subsystem(サブシステム)

実際に機能を実装しているクラスやオブジェクトの集まりです。それぞれ独立して動作しますが、Facadeによって「包まれ(ラップされ)」、その結果インターフェース全体が簡素化されます。

Facade(ファサード)

サブシステムの上に位置する抽象化レイヤーです。どのサブシステムにどの処理を委譲すべきかを把握しており、クライアントからの要求を適切なサブシステムへ振り分ける役割を担います。

Facadeパターンのメリット

  • 複雑な内部構造を隠せるため、クライアント側のコードがシンプルになる
  • サブシステムとクライアントの結合度が下がり、保守性・拡張性が向上する
  • リファクタリングや修正が難しい既存ライブラリやレガシーコードも、Facade経由なら安全かつ容易に扱える

このパターンは非常に汎用性が高く、ほぼすべての大規模アプリケーションに適用できます。特に、さまざまな理由で内部のコードを修正したりリファクタリングしたりできないコンポーネントを扱う場面で真価を発揮します。

C#での実装例

ここでは「家を出て会社へ向かう」「会社から帰宅する」という一連の操作を例に考えてみましょう。照明・音楽システム・エアコンという3つのサブシステムを個別に操作する代わりに、HomeFacadeという窓口を通じて一度にまとめて制御できます。

public class HomeFacade {
    LightsFacade light;
    MusicSystemFacade musicSystem;
    AcFacade ac;

    public HomeFacade() {
        light = new LightsFacade();
        musicSystem = new MusicSystemFacade();
        ac = new AcFacade();
    }

    public void LeaveHomeForOffice() {
        light.SwitchOffLights();
        musicSystem.SwitchOffMusicSystem();
        ac.SwitchOffAc();
    }

    public void ArriveHomeFromOffice() {
        light.SwitchOnLights();
        musicSystem.SwitchOnMusicSystem();
        ac.SwitchOnAc();
    }
}

public class LightsFacade {
    public void SwitchOnLights() {
        Console.WriteLine("Switched on Lights");
    }
    public void SwitchOffLights() {
        Console.WriteLine("Switched off Lights");
    }
}

public class MusicSystemFacade {
    public void SwitchOnMusicSystem() {
        Console.WriteLine("Switched on MusicSystem");
    }
    public void SwitchOffMusicSystem() {
        Console.WriteLine("Switched off MusicSystem");
    }
}

public class AcFacade {
    public void SwitchOnAc() {
        Console.WriteLine("Switched on Ac");
    }
    public void SwitchOffAc() {
        Console.WriteLine("Switched off Ac");
    }
}

クライアントはLeaveHomeForOffice()メソッドを1回呼び出すだけで、照明・音楽システム・エアコンの3つをまとめてオフにできます。各サブシステムの内部詳細を知らなくても操作できるため、コードの可読性と保守性が大幅に向上します。

まとめ

Facadeパターンは、複雑なサブシステムを単純なインターフェースで包み込むことで、利用側のコードを劇的にシンプルにできる強力なパターンです。「毎回同じ手順で複数のオブジェクトを操作している」と感じたら、それをFacadeに切り出すことを検討してみてください。

  1. googledrivesync.exeとは?安全性の確認から削除・エラー対処法まで徹底解説

    パソコンを使っていると、システム上に「googledrivesync.exe」というファイルが存在することに気づくことがあります。このファイルが何のために使われているのか、WindowsやChrome OSで保持しておくべきものなのか分からず不安に感じる方も多いでしょう。また、「以前からgoogledrivesync.exeが存在しているのに動作が非常に遅い」「タスクマネージャーで処理が終わるのか心配になる」といったケースに遭遇した方もいるかもしれません。 いずれの場合でも、「googledrivesync.exeはウイルスなのか?」「なぜタスクマネージャーで実行されているのか?」「どうすれば

  2. BIOSとは?仕組みとWindows 10での正しい更新方法を徹底解説

    パソコンでキーボードの不具合、電源まわりのトラブル、インターネット接続の問題や動作速度の低下などが発生したとき、その原因がBIOSに関連しているケースは少なくありません。修理業者やITの専門家に相談すると、本格的なトラブルシューティングの前に「まずBIOSを更新してみてください」とアドバイスされることも多いでしょう。実際、BIOSの更新だけで問題が解決するケースも多くあります。 BIOSとは? BIOS(Basic Input/Output System:基本入出力システム)は、PCのマザーボード上にある小さなメモリチップに格納されたソフトウェアで、CPUやGPUなど、PCに搭載されたすべての