【5分でわかる🚪】TypeScriptでDesign Pattern〜Facade Pattern〜
どうも、ちゃんなるです!
今回は、Facade Patternを紹介します🖐️
概要
Facade Patternは、システムのサブシステムやインターフェースに対して、一つの統一されたインターフェースを提供するデザインパターンです。
これにより、クライアントは複雑なサブシステムを直接操作せずに、簡素化されたインターフェースを利用することができます。
Facade Patternの利点は以下の通りです。
- システムの複雑さを隠蔽し、使いやすさを向上させる
- クライアントとサブシステムの結合度を低く保つ
- サブシステムの再利用性を高める
今回示すプログラムの設計
今回、複数のサブシステム(データベース操作、メール送信、ログ記録)を持つアプリケーションを想定します。
Facade Pattern
を使って、これらのサブシステムへのアクセスを簡単に管理する方法を示します👍
クラス図
クラス名 | 役割 |
---|---|
Client | Facadeを通してサブシステムを操作する |
Facade | クライアントが利用する統一インターフェースを提供 |
DatabaseSubsystem | ユーザー情報の追加を担当 |
MailSubsystem | メール送信を担当 |
LoggerSubsystem | ログ記録を担当 |
サンプルコード
このコードでは、Facade
クラスが3つのサブシステム(DatabaseSubsystem
、MailSubsystem
、LoggerSubsystem
)を内部で操作しています。
クライアントは、Facade
のcreateUser
メソッドを呼び出すだけで、ユーザーを登録し、メールを送信し、ログを記録することができます。
class DatabaseSubsystem { addUser(email: string, password: string): void { console.log(`User added: ${email}`); } } class MailSubsystem { sendWelcomeEmail(email: string): void { console.log(`Welcome email sent to: ${email}`); } } class LoggerSubsystem { log(message: string): void { console.log(`Log: ${message}`); } }
class Facade { private database: DatabaseSubsystem; private mailer: MailSubsystem; private logger: LoggerSubsystem; constructor() { this.database = new DatabaseSubsystem(); this.mailer = new MailSubsystem(); this.logger = new LoggerSubsystem(); } createUser(email: string, password: string): void { this.database.addUser(email, password); this.mailer.sendWelcomeEmail(email); this.logger.log(`User created: ${email}`); } }
class Client { static main(): void { const facade = new Facade(); facade.createUser('example@example.com', 'password123'); } } Client.main();
Facade Patternの使い道
Facade Patternは、以下のようなシナリオで適用されます。
- 複雑なサブシステムがあり、それらを簡素化したインターフェースで提供したい場合
- サブシステムの再利用性を高めたい場合
- クライアントとサブシステムの結合度を低く保ちたい場合
組み合わせられるデザインパターン
Facade Patternは、以下のデザインパターンと相性が良いです。
- Abstract Factory Pattern: サブシステムの具体的な実装を隠蔽するために使用できます。
- Singleton Pattern: Facadeクラスのインスタンスをシステム全体で共有するために使用できます。
まとめ
Facade Patternは、システムの複雑さを隠蔽し、クライアントに簡単に使える統一インターフェースを提供するデザインパターンです。
サンプルコードを試して、アプリケーションの複雑さを軽減し、使いやすさと再利用性を向上させる方法を体感してみてください。
Facade Patternを活用すれば、より洗練されたコード設計ができるようになるでしょう!