
الگوی طراحـــــــــی Bridge
الگوی Bridge در صنعت مالی و بانکداری نیز میتواند کاربرد داشته باشد. به عنوان یک مثال ساده، فرض کنید ما سیستمی برای مدیریت حسابهای بانکی داریم و میخواهیم امکان اتصال به بانکهای مختلف با انواع مختلفی از ارتباطات را داشته باشیم.
برای درک بهتر این الگو، با یک مثال ملموس و کاربردی در دنیای واقعی آشنا میشویم:
1. Implementor (پیادهساز): اینجا یک رابط `IBankConnection` را تعریف میکنیم که واسطهای برای ارتباط با بانکها است.
1public interface IBankConnection
2{
3 void Connect();
4 void TransferMoney(string sourceAccount, string destinationAccount, decimal amount);
5}
2. ConcreteImplementor (پیادهسازهای خاص): اینجا دو کلاس `OnlineBankConnection` و `ATMBankConnection` را تعریف میکنیم که از رابط `IBankConnection` ارثبری کردهاند و روشهای مختلفی برای ارتباط با بانکها را پیادهسازی میکنند.
1public class OnlineBankConnection : IBankConnection
2{
3 public void Connect()
4 {
5 Console.WriteLine("Connected to online banking server");
6 }
7
8 public void TransferMoney(string sourceAccount, string destinationAccount, decimal amount)
9 {
10 // الگوریتم انتقال پول از حساب مبدا به حساب مقصد در حالت آنلاین
11 Console.WriteLine($"Transferring {amount} from account {sourceAccount} to account {destinationAccount} online");
12 }
13}
14
15public class ATMBankConnection : IBankConnection
16{
17 public void Connect()
18 {
19 Console.WriteLine("Connected to ATM server");
20 }
21
22 public void TransferMoney(string sourceAccount, string destinationAccount, decimal amount)
23 {
24 // الگوریتم انتقال پول از حساب مبدا به حساب مقصد در حالت ATM
25 Console.WriteLine($"Transferring {amount} from account {sourceAccount} to account {destinationAccount} via ATM");
26 }
27}
3. Abstraction (انتزاع): اینجا کلاس `BankAccount` را تعریف میکنیم که از رابط `IBankConnection` استفاده میکند و عملیاتهای مرتبط با حسابهای بانکی را انجام میدهد.
1public class BankAccount
2{
3 protected IBankConnection bankConnection;
4
5 public BankAccount(IBankConnection bankConnection)
6 {
7 this.bankConnection = bankConnection;
8 }
9
10 public void ConnectToBank()
11 {
12 bankConnection.Connect();
13 }
14
15 public void TransferMoney(string sourceAccount, string destinationAccount, decimal amount)
16 {
17 bankConnection.TransferMoney(sourceAccount, destinationAccount, amount);
18 }
19}
4. Client (کلاینت): اینجا برنامهای را با توجه به الگوی Bridge ایجاد میکنیم و امکان انتخاب نوع ارتباط با بانک (آنلاین یا ATM) را به کاربر میدهیم.
1public class Program
2{
3 public static void Main()
4 {
5 IBankConnection onlineBankConnection = new OnlineBankConnection();
6 BankAccount onlineBankAccount = new BankAccount(onlineBankConnection);
7 onlineBankAccount.ConnectToBank();
8 onlineBankAccount.TransferMoney("123456789", "987654321", 1000);
9
10 IBankConnection atmBankConnection = new ATMBankConnection();
11 BankAccount atmBankAccount = new BankAccount(atmBankConnection);
12 atmBankAccount.ConnectToBank();
13 atmBankAccount.TransferMoney("123456789", "987654321", 500);
14 }
15}
خروجی برنامه به صورت زیر خواهد بود:
Connected to online banking server
Transferring 1000 from account 123456789 to account 987654321 online
Connected to ATM server
Transferring 500 from account 123456789 to account 987654321 via ATM
در این مثال با استفاده از الگوی Bridge، توانستیم رابط ارتباط با بانکها (`IBankConnection`) را جدا کنیم و از روشهای مختلفی برای ارتباط با بانکها استفاده کنیم. این الگو به ما امکان اضافه کردن بانکها با روشهای مختلف را به سیستم مدیریت حسابهای بانکی میدهد بدون اینکه نیاز به تغییر در کد موجود باشد.